我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MyBatis有哪些动态标签

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MyBatis有哪些动态标签

小编给大家分享一下MyBatis有哪些动态标签,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

前言

MyBatis提供了9种动态SQL标签:trim、where、set、foreach、if、choose、when、otherwise、bind;
其执行原理为,使用OGNL从SQL参数对象中计算表达式的值,根据表达式的值动态拼接SQL,以此来完成动态SQL的功能。

动态标签用法

1.if

If : 当参数满足条件才会执行某个条件

<select id="findName" resultType="String">  SELECT stu.name FROM tab_stu stu WHERE age = 20   <if test="name != null">    AND name like #{name}  </if></select>

2.choose、when、otherwise

choose、when、otherwise : choose标签是按顺序判断其内部when标签中的test条件是否成立,如果有一个成立,则choose结束;如果所有的when条件都不满足时,则执行otherwise中的SQL。类似于java的switch语句。

<select id="findName" resultType="String">  SELECT stu.name FROM tab_stu stu WHERE age = #{age} <choose>  <when test="name != null">    AND name like #{name}</when><when test="class != null">AND class like #{class}</when><otherwise>AND class = 1</otherwise>  </choose></select>

3.where

<select id="findName" resultType="String">  SELECT stu.name FROM tab_stu stu WHERE <if test="age != null">age = #{age}</if>  <if test="name!= null">AND name= #{name}</if> <if test="class!= null">AND class = #{class}</if> </select>

当第一个if不满或第一第二第三个if都不满足,会出现以下情况

SELECT stu.name FROM tab_stu stu WHERE AND name = "小米" AND class ="1班”;SELECT stu.name FROM tab_stu stu WHERE;

这会导致查询失败。使用where标签可以解决这个问题

<select id="findName" resultType="String">  SELECT stu.name FROM tab_stu stu <where> <if test="age != null">age = #{age}</if>  <if test="name!= null">AND name= #{name}</if> <if test="class!= null">AND class = #{class}</if> </where></select>

where标签会在只有一个以上的if条件满足的情况下才去插入WHERE关键字,而且,若最后的内容是”AND”或”OR”开头的,where也会根据语法绝对是否需要保留。

4.set

set标签用于解决动态更新语句存在的符号问题

<update id="updateStu">Update tab_stu<set><if test="name != null"> name=#{name},</if><if test="age != null"> age=#{age},</if><if test="class != null"> class=#{class},</if><if test="subject != null"> subject=#{subject}</if></set></update>

set标签会动态前置SET关键字,同时也会消除无关的逗号,因为用了条件语句后,可能就会在生成的赋值语句的后面留下逗号。

5.trim

trim:trim标签可实现where/set标签的功能
Trim标签有4个属性,分别为prefix、suffix、prefixOverrides、suffixOverrides
prefix:表示在trim标签包裹的SQL前添加指定内容
suffix:表示在trim标签包裹的SQL末尾添加指定内容
prefixOverrides:表示去掉(覆盖)trim标签包裹的SQL指定首部内容,去掉多个内容写法为and |or(中间空格不能省略)(一般用于if判断时去掉多余的AND |OR)
suffixOverrides:表示去掉(覆盖)trim标签包裹的SQL指定尾部内容(一般用于update语句if判断时去掉多余的逗号)

<select id="findName" resultType="String">  SELECT stu.name FROM tab_stu stu <trim prefix="where" prefixOverrides="and |or"><if test="age != null">age = #{age}</if>  <if test="name!= null">AND name= #{name}</if> <if test="class!= null">OR class = #{class}</if> </trim></select>
<update id=”updateStu”>Update tab_stu<trim prefix="set" subfix="where id=#{id}" suffixOverrides=","><if test="name != null"> name=#{name},</if><if test="age != null"> age=#{age},</if><if test="class != null"> class=#{class},</if><if test="subject != null"> subject=#{subject}</if></trim></update>

6.foreach

foreach:对集合进行遍历

<select id="findName" resultType="String"> SELECT stu.name FROM tab_stu stu where id in<foreach item=”item” index=”index” collection=”listName” open=”(” separator=”,” close=”)”>#{item}</foreach></select>

下面是foreach标签的各个属性:
collection:迭代集合的名称,可以使用@Param注解指定,该参数为必选(java入参,相对于#{listName})
item:表示本次迭代获取的元素,若collection为List、Set或数组,则表示其中元素;若collection为Map,则代表key-value的value,该参数为必选
index:在List、Set和数组中,index表示当前迭代的位置,在Map中,index指元素的key,该参数是可选项
open:表示该语句以什么开始,最常使用的是左括弧”(”,MyBatis会将该字符拼接到foreach标签包裹的SQL语句之前,并且只拼接一次,该参数是可选项
close:表示该语句以什么结束,最常使用的是右括弧”)”,MyBatis会将该字符拼接到foreach标签包裹的SQL语句末尾,该参数是可选项
separator:MyBatis会在每次迭代后给SQL语句添加上separator属性指定的字符,该参数是可选项

7.bind

bind:bind标签可以从OGNL(对象图导航语言)表达式中创建一个变量并将其绑定到上下文
Mybatis中使用Mysql的模糊查询字符串拼接(like) 中也涉及到bind的使用

<select id="findName" resultType="String">  SELECT stu.name FROM tab_stu stu <where> <if test="name!= null"> <bind name="stuName" value="'%'+stuName+'%'">name like #{stuName}</if> </where></select>

看完了这篇文章,相信你对“MyBatis有哪些动态标签”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MyBatis有哪些动态标签

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MyBatis有哪些动态标签

小编给大家分享一下MyBatis有哪些动态标签,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!前言MyBatis提供了9种动态SQL标签:trim、where、set、foreach、if、choose、when、other
2023-06-22

mybatis动态SQL标签有什么作用

MyBatis动态SQL标签用于在SQL语句中添加条件判断和循环操作,根据条件动态生成SQL语句。通过使用动态SQL标签,可以根据不同的条件生成不同的SQL语句,避免在Java代码中拼接SQL语句,提高代码的可读性和维护性。常用的动态SQL
mybatis动态SQL标签有什么作用
2024-04-09

MyBatis中实现动态SQL标签

目录动态SQL的用途常见的动态SQL标签1. 标签2. 标签3. 标签4. 标签5. 标签6. 标签总结动态SQL是MyBw
MyBatis中实现动态SQL标签
2024-09-06

MyBatis动态<if>标签的使用

本文主要介绍了MyBatis动态<if>标签的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-19

怎么使用MyBatis的动态SQL标签

MyBatis的动态SQL标签可以帮助我们在SQL语句中根据条件来动态生成不同的SQL片段,从而实现更灵活的查询。下面是一些MyBatis动态SQL标签的使用示例:if标签:根据条件判断来生成SQL片段