Mybatis动态sql语句的使用

本文详细介绍了MyBatis中的动态SQL标签,包括`if`、`where`、`trim`、`choose`、`when`、`otherwise`和`foreach`等,它们在构建动态SQL语句时的作用和用法。通过这些标签,可以灵活地根据条件拼接SQL,提高代码的可读性和可维护性,减少不必要的冗余。例如,`where`标签用于处理`where`子句,`trim`标签则用于动态添加或移除内容,而`foreach`则用于循环操作,如批量插入。理解并熟练运用这些标签,能够有效提升开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

if

作为条件判断,如果满足if条件,则if标签上的内容便会自动拼接导sql语句中

<select id="xxx" resultType="xxx"> 
select * from t_xxx where 1=1 
<if test="a != '' and a != null"> and a = #{a}</if> 
<if test="b != '' and b != null"> and b = #{b}</if> 
<if test="c != '' and c != null"> and c = #{c}</if> 
</select>


通过if语句对sql语句进行动态拼接以满足不同条件下的开发目标是一个降低耦合的好办法,但是因为sql语句条件下需要and 或者 or 连接条件,所以单单使用if语句并不能很好的解决问题,这个使用就可以在连接if语句之前加上一个永真语句就可以解决,也可以和后面的语句配合使用。

where

where是一个连接语句一般用来和if配合使用

若where标签中的if条件都不满足,则where标签没有任何功能,即不会添加where关键字
若where标签中的if条件满足,则where标签会自动添加where关键字,并将条件最前方多余的 and去掉

<select id="xxx" resultType="xxx"> select * from t_xxx 
<where> 
<if test="a != '' and a != null"> a = #{a}</if> 
<if test="b != '' and b != null"> and b = #{b}</if> 
<if test="c != '' and c != null"> and c = #{c}</if> 
</where> 
</select>

trim

trim用于去掉或添加标签中的内容

prefix:在trim标签中的内容的前面添加某些内容

prefixOverrides:在trim标签中的内容的前面去掉某些内容

suffix:在trim标签中的内容的后面添加某些内容

suffixOverrides:在trim标签中的内容的后面去掉某些内容

使用trim也可以很好的解决if语句添加多或者少的问题

<select id="xxx" resultType="xxx"> select * from t_xxx
<trim prefix="where" suffixOverrides="and">
<if test="a != '' and a != null"> a = #{a}</if> 
<if test="b != '' and b != null"> and b = #{b}</if> 
<if test="c != '' and c != null"> and c = #{c}</if> 
</trim>
</select>

choose、when、otherwise

相当于if...else if...else

就是和Java语法完全相同就是换了一个名称

<select id="xxx" resultType="xxx"> 
select * from t_xxx <where> 
<choose> 
<when test="a != '' and a != null"> a = #{a}</when> 
<when test="b != '' and b != null"> b = #{b}</when> 
<when test="c != '' and c != null"> c = #{c}</when> 
</choose> 
</where> 
</select>

foreach

循环语句用于实现批量添加或者批量删除或者批量修改

<insert id="xxxx"> 
insert into t_xxx values 
<foreach collection="xxx" item="xxx" separator=","> 
(null,#{xxx.x},#{xxx.x},#{xxx.x},#{xxx.x},null)
</foreach>
</insert>

collection:用来接受传过来的集合片段

item:用来取出集合中的一个元素

separator:用来给每一次给各个循环中间加上连接符

SQL片段

sql片段,可以记录一段公共sql片段,在使用的地方通过include标签进行引入

<sql id="Columns"> xxx,xxx,xxx,xxx,xxx</sql> 
select <include refid="Columns"></include> from t_xxx

一直用 * 在未来开发中是不规范的,因为*其实在数据库内部也是发生转换变成全部属性的,所以直接写就可以直接避免转换的步骤,但是每次都写难免麻烦,这个时候就可以把片段变成sql片段就可以直接调取


以上就是关于动态sql的基本标签的认识啦

如有错误欢迎指出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值