004-SSM三大框架(二)—— MyBatis 框架动态 SQL


一、使用动态 SQL 前期说明


  在 mapper 的动态 SQL 中若出现大于号(>)、小于号(<)、大于等于号(>=),小于等于号(<=)等符号,最好将其转换为实体符号。否则,XML 可能会出现解析出错问题,特别是对于小于号(<),在 XML 中是绝不能出现的。


二、动态 SQL 之 < if >


  语法:< if test= ”条件” > sql 语句的部分 < /if >
  对于该标签的执行,当 test 的值为 true 时,会将其包含的 SQL 片断拼接到其所在的 SQL 语句中,例如:

<select id="getByName"  resultType="com.domain.User">
		<!--添加1=1的原因请看下面第三点-->
        select * from users where 1=1
		<if test="userName != null and userName !='' ">
		and userName = #{userName}
		</if>
		<if test="sex != null and sex !='' ">
		and sex = #{sex}
		</if> 
</select>

三、动态 SQL 之 < where >

   < if >标签的中存在一个比较麻烦的地方就是需要在 where 后手工添加 1=1 的子句。因为,若 where 后的所有< if >条件均为 false,而 where 后若又没有 1=1 子句,则 SQL 中就会只剩下一个空的 where,此时SQL出错。
   又或者第一个< if >条件为 false时候,下一个< if >条件为trun,此时拼接上去的sql语句就会多出一个 and ,此时SQL出错。
   因此针对以上两种情况,在 where 后,需要添加永为真子句 1=1,以防止这种情况的发生。但当数据量很大时,会严重影响查询效率。因此我们可以使用标签,在有查询条件时,可以自动添加上 where 子句;没有查询条件时,不会添加where 子句。例如:

<select id="getByName"  resultType="com.domain.User">
	select * from users 
	<where>
		<if test="userName != null and userName !='' ">
		and userName = #{userName}
		</if>
		<if test="sex != null and sex !='' ">
		and sex = #{sex}
		</if> 
	</where>
</select>

   需要注意的是,第一个标签中的 SQL 片断,可以不包含 and。不过,写上 and 也不错,系统会将多出的 and 去掉。但其它中 SQL 片断的 and,必须要求写上,否则 SQL 语句将拼接出错。


四、动态 SQL 之 < foreach >

   用于实现对于数组与集合的遍历;
   语法:
   < foreach collection=" 集合类型" open=" 开始的字符" close=" 结束的字符"
      item=" 集合中的成员" separator=" 集合成员之间的分隔符">
      #{item 的值}
   < /foreach>

  1. 接口中的方法
	List<User> selectUser(List<Integer> idList);
<select id="selectUser"  resultType="com.domain.User">
	select * from users 
		<if test="list !=null and list.size > 0 ">
		where id in
		<foreach collection="list" open=(" close=")" item="userid" separator=",">
		#{userid}
		</foreach>
		</if> 
</select>


写在最后

以上 MyBatis 中关于 动态 SQL的具体内容,后续如果有时间的话我也将持续更新,如果有错误或者是哪里不足的地方,欢迎各位大大提出宝贵的意见呀~

此外,为了让大家更方便地使用,如果需要 mybatis 的官方文件 mybatis-3.5.1.pdf 可以关注下方公众号,后台回复 “mybatis ”即可获取,期待着您的光临~

在这里插入图片描述




相关链接:

链接: 003-SSM三大框架(二)—— 深入理解 MyBatis 的参数传递.
链接: 002-SSM三大框架(二)—— 基于Maven工程搭建 MyBatis 开发环境.
链接: 001-SSM三大框架(一)—— 三层架构.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值