MyBatis几种SQL写法
目录
1. 批量操作:通过标签支持批量插入
2. 批量操作:通过标签支持批量更新
3. 批量操作:通过标签支持批量删除
4. 动态SQL
3. 多条件分支查询
4. SQL语句优化:使用标签避免多余的AND或OR关键字。
5. 注解方式使用MyBatis
6. 一对多
7. 多对一:每个评论(Comment)都属于一篇文章(Article),并且每篇文章可以有多个评论。
8. MyBatis-Plus集成
1. 批量操作:通过<foreach>
标签支持批量插入
<insert id="batchInsert" parameterType="java.util.List">INSERT INTO user (username, email,phone, create_time) VALUES<foreach collection="list" item="item" separator=",">(#{item.username}, #{item.email},#{item.phone}, #{item.createTime})</foreach>
</insert>
2. 批量操作:通过<foreach>
标签支持批量更新
<update id="batchUpdate" parameterType="java.util.List"><foreach collection="list" item="item" separator=";">UPDATE userSET username = #{item.username}, email = #{item.email}WHERE id = #{item.id}</foreach>
</update>
3. 批量操作:通过<foreach>
标签支持批量删除
<delete id="batchDelete" parameterType="java.util.List">DELETE FROM user WHERE id IN<foreach collection="list" item="id" open="(" separator="," close=")">#{id}</foreach>
</delete>
4. 动态SQL
<select id="findUsers" resultType="User">SELECT * FROM userWHERE 1=1<if test="username != null and username != ''">AND username LIKE CONCAT('%', #{username}, '%')</if><if test="email != null and email != ''">AND email = #{email}</if><if test="status != null">AND status = #{status}</if>
</select>
3. 多条件分支查询
<select id="findUsersByCondition" resultType="User">SELECT * FROM user<where><choose><when test="searchType == 'username'">username LIKE CONCAT('%', #{keyword}, '%')</when><when test="searchType == 'email'">email LIKE CONCAT('%', #{keyword}, '%')</when><otherwise>(username LIKE CONCAT('%', #{keyword}, '%') OR email LIKE CONCAT('%', #{keyword}, '%'))</otherwise></choose></where>
</select>
4. SQL语句优化:使用<trim>
标签避免多余的AND
或OR
关键字。
<select id="findUsers" resultType="User">SELECT * FROM user<trim prefix="WHERE" prefixOverrides="AND |OR "><if test="username != null and username != ''">AND username LIKE CONCAT('%', #{username}, '%')</if><if test="email != null and email != ''">AND email = #{email}</if><if test="status != null">AND status = #{status}</if></trim>
</select>
5. 注解方式使用MyBatis
public interface UserMapper {@Select("SELECT * FROM user WHERE id = #{id}")User getUserById(Long id);@Insert("INSERT INTO user (username, email, create_time) VALUES (#{username}, #{email}, #{createTime})")@Options(useGeneratedKeys = true, keyProperty = "id")int insertUser(User user);@Update("UPDATE user SET username = #{username}, email = #{email} WHERE id = #{id}")int updateUser(User user);@Delete("DELETE FROM user WHERE id = #{id}")int deleteUser(Long id);
}
6. 一对多
<resultMap id="userWithOrdersMap" type="User"><id property="id" column="user_id"/><result property="username" column="username"/><collection property="orders" ofType="Order"><id property="id" column="order_id"/><result property="orderNumber" column="order_number"/><result property="createTime" column="order_create_time"/></collection>
</resultMap><select id="getUserWithOrders" resultMap="userWithOrdersMap">SELECT u.id as user_id, u.username, o.id as order_id, o.order_number, o.create_time as order_create_timeFROM user uLEFT JOIN orders o ON u.id = o.user_idWHERE u.id = #{userId}
</select>
7. 多对一:每个评论(Comment)都属于一篇文章(Article),并且每篇文章可以有多个评论。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.example.mapper.ArticleMapper"><!-- 定义 Comment 的 resultMap --><resultMap id="commentWithArticleMap" type="Comment"><id property="id" column="comment_id"/><result property="content" column="comment_content"/><result property="createTime" column="comment_create_time"/><association property="article" javaType="Article"><id property="id" column="article_id"/><result property="title" column="article_title"/><result property="content" column="article_content"/></association></resultMap><!-- 定义 Article 的 resultMap --><resultMap id="articleWithCommentsMap" type="Article"><id property="id" column="article_id"/><result property="title" column="article_title"/><result property="content" column="article_content"/><collection property="comments" ofType="Comment" resultMap="commentWithArticleMap"/></resultMap><!-- 查询文章及其评论列表 --><select id="getArticleWithComments" resultMap="articleWithCommentsMap">SELECT a.id as article_id,a.title as article_title,a.content as article_content,c.id as comment_id,c.content as comment_content,c.create_time as comment_create_timeFROM article aLEFT JOIN comment c ON a.id = c.article_idWHERE a.id = #{articleId}</select></mapper>
8. MyBatis-Plus集成
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {public List<User> findUsersByCondition(String username, String email) {return this.list(new QueryWrapper<User>().like(StringUtils.isNotBlank(username), "username", username).eq(StringUtils.isNotBlank(email), "email", email));}
}
相关文章:
MyBatis几种SQL写法
目录 1. 批量操作:通过标签支持批量插入 2. 批量操作:通过标签支持批量更新 3. 批量操作:通过标签支持批量删除 4. 动态SQL 3. 多条件分支查询 4. SQL语句优化:使用标签避免多余的AND或OR关键字。 5. 注解方式使用MyBatis 6. 一对多 7. 多对一&…...

蓝牙音响音频功放:【矽源特HAA9809 AB+D类自动切换】
目录 1:HAA9809特性 2:典型应用电路 3:CTRL管脚控制信息 4:一线脉冲控制方式 5:输入电阻,调节放大增益 6:输入电容,调节频响 7:总结 矽源特ChipSourceTek-HAA9809…...
Webpack知识点—publicPath
文章目录 一、publicPath的定义和作用二、publicPath的配置方式三、publicPath的注意事项四、publicPath的常见问题和解决方法五、Vite 如何修改publicPathWebpack的publicPath是一个重要的配置项,它用于指定打包后生成的静态资源文件在浏览器中的访问路径。 一、publicPath的…...
【JAVA】Java基础—面向对象编程:构造方法的重载
在Java中,构造方法的重载允许一个类定义多个构造方法,这些构造方法可以具有不同的参数列表。通过构造方法的重载,我们可以根据不同的需求创建对象,并以不同的方式初始化对象的属性。 我们可以将构造方法的重载比作一个餐厅的菜单…...

科研绘图系列:R语言多图形组合(barplot boxplot stacked plots)
文章目录 介绍加载R包数据下载图:Barplot图:Boxplot per elemental composition图:网络的边数目图:Clusters - elemental composition合并图形系统信息介绍 R语言多个图形组合 加载R包 library(tidyverse) library(ggpubr) library(rstatix) library(patchwork)数据下载…...

诡异的win11远程桌面连接一闪而过
客户端win10,服务器端是win2019 上面的仅允许允许使用网络级别身份验证的也勾掉了。 mstsc和mstsc -admin远程桌面连接,输入ip点连接后闪退,根本不弹出用户密码输入。但有人也是win10却可以连,也不知道自己的win10有啥差异的地方。…...
基因组编辑与CRISPR技术:基因治疗的革命性突破
引言 基因组编辑技术的出现,尤其是CRISPR-Cas9技术的问世,极大地推动了生物医学研究和基因治疗的发展。这一技术不仅为基础科学研究提供了强大的工具,也为治疗遗传性疾病、癌症以及某些病毒感染开辟了新的治疗思路。基因组编辑技术可以精准地…...

智能检测技术与传感器(热电传感器四个定律)
热电传感器: 两种不同的导体两端相互紧密地连接在一起,组成一个闭合回路。当两接点温度不等时(设 ),回路中就会产生大小和方向与导体材料及两接点的温度有关的电动势,从而形成电流,这种现象称为…...

C# WPF FontDialog字体对话框,ColorDialog颜色对话框 引用
WPF 并没有内置FontDialog和ColorDialog,但可以通过引用 Windows Forms 的控件来实现字体和颜色选择对话框功能。FontDialog 允许用户选择字体、样式、大小等设置。 添加 Windows Forms的引用 项目工程:右键“引用”》“添加引用”》勾选System.Window…...

在unity中实现把普通的照片,图片 变成油画风格的shader实现
可以通过对shader的Radius的值得设置来改变油画风格的力度,0最小,10是最大。...

使用elementUI实现表格行拖拽改变顺序,无需引入外部库
前言: 使用vue2element UI,且完全使用原生的拖拽事件,无需引入外部库。 如果表格数据量较大,或需要更多复杂功能,可以考虑使用 vuedraggable库,提供更多配置选项和拖拽功能。 思路: 1. 通过el-table的ro…...

PySpark 数据处理实战:从基础操作到案例分析
Spark 的介绍与搭建:从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交:本地与集群模式全解析-CSDN博客 Spark on YARN:Spark集群模式…...

恒源云使用手册记录:从服务器下载数据到本地
文章目录 一、xftp下载二、通过Xftp客户端连接站点 一、xftp下载 先下载xftp:下载连接 二、通过Xftp客户端连接站点 右击文件,点击新建 名称可以任意 主机、端口号、用户名 点击这里的复制登录命令 比如我这里得到ssh -p 41604 rooti-2.gpushare.co…...

【大咖云集 | IEEE计算智能学会广州分会支持】第四届信息技术与当代体育国际学术会议(TCS 2024,12月13-15日)
第四届信息技术与当代体育国际学术会议(TCS 2024) 2024 4th International Conference on Information Technology and Contemporary Sports 重要信息 会议官网:www.icitcs.net(会议关键词:TCS 2024) 202…...

【AI声音克隆整合包及教程】第二代GPT-SoVITS V2:技术、应用与伦理思考
一、引言 在当今科技迅速发展的时代,声音克隆技术成为人工智能领域的一个备受瞩目的分支。GPT-SoVITS V2作为一种声音克隆工具,正逐渐进入人们的视野,它在多个领域展现出巨大的潜力,同时也引发了一系列值得深入探讨的问题。本文旨…...

利用AI制作《职业生涯规划PPT》,10分钟完成
职业生涯规划是大学生活中非常重要的一环。通过制定职业规划,你能够明确未来的职业目标、认清自身的优劣势,进而制定切实可行的计划,以便顺利踏上职业发展的道路。而制作一份精美的职业生涯规划PPT,能有效帮助你在面试、职业规划报…...

【Java多线程】线程安全及解决方案(详解)
目录 线程安全问题引入: 线程安全原因 如何解决线程安全问题? (1)synchronized关键字 1)sychronized关键字的特性: 2)可重⼊ synchronized使⽤⽰例 (2)volatile关键字 1)内存可见性和…...
【前端基础】Javascript取整函数以及向零取整方式
向零取整方式 在JavaScript中,有多种方式可以对数字进行取整操作,即去掉小数部分,只保留整数部分。其中,向0取整(也称为截断小数部分)的方式有以下几种常用的方法: 使用 Math.trunc()ÿ…...

禅道与Jira与Ones对比:哪个更适合你的项目管理需求?
一、项目管理工具的重要性 在当今复杂的项目环境中,选择合适的项目管理工具对项目成功至关重要。随着项目规模的不断扩大、涉及领域的日益广泛以及团队成员的分散性,传统的项目管理方式已经难以满足需求。 项目管理工具可以帮助团队更好地规划和组织项…...
Linux I/O编程:I/O多路复用与异步 I/O对比
文章目录 0. 引言1. I/O 模型简介1.1 阻塞 I/O(Blocking I/O)1.2 非阻塞 I/O(Non-Blocking I/O)1.3 信号驱动式 I/O(Signal-Driven I/O)1.4 多路复用 I/O(I/O Multiplexing)1.5 异步…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...

中科院1区顶刊|IF14+:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点
中科院1区顶刊|IF14:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点 当下,免疫与代谢性疾病的关联研究已成为生命科学领域的前沿热点。随着研究的深入,我们愈发清晰地认识到免疫系统与代谢系统之间存在着极为复…...

多模态学习路线(2)——DL基础系列
目录 前言 一、归一化 1. Layer Normalization (LN) 2. Batch Normalization (BN) 3. Instance Normalization (IN) 4. Group Normalization (GN) 5. Root Mean Square Normalization(RMSNorm) 二、激活函数 1. Sigmoid激活函数(二分类&…...
湖北理元理律师事务所:债务清偿方案中的法律技术革新
文/金融法律研究组 当前债务服务市场存在结构性矛盾:债权人追求快速回款,债务人需要喘息空间。湖北理元理律师事务所通过创新法律技术,在《企业破产法》《民法典》框架下构建梯度清偿模型,实现多方利益平衡。 一、个人债务优化的…...

【HTML】HTML 与 CSS 基础教程
作为 Java 工程师,掌握 HTML 和 CSS 也是需要的,它能让你高效与前端团队协作、调试页面元素,甚至独立完成简单页面开发。本文将用最简洁的方式带你掌握核心概念。 一、HTML,网页骨架搭建 核心概念:HTML通过标签定义内…...