【框架】mybatis--动态sql

动态sql是对sql语句的灵活操作,通过表达式进行判断,对sql进行灵活拼接,组装

动态sql  if的使用

需求:用户信息综合查询和用户信息查询总数两个statement的定义使用动态sql灵活拼接

<where>可以自动去掉第一个拼接语句前的and

<if>判断对象是否为空

这样可以实现去掉任意一个条件都可以随意拼接。组装sql语句。

 

动态sql  sql片段的使用

将重复的sql代码片段抽取出来,组成一个sql片段。其它的statement中就可以引用sql片段。方便程序员进行开发。

编写sql片段

	<sql id="query_user">
		<if test="userCustom!= null and userCustom!=''">
			<if test="userCustom.sex != null and userCustom.sex!=''">
				and user.sex=#{userCustom.sex}
			</if>
			
			<if test="userCustom.username != null and userCustom.username!=''">
				and user.username like '%${userCustom.username}%'
			</if>
		</if>
	</sql>

id是sql片段的唯一标识。

最好基于单表定义sql片段,征用sql片段重用性高。。

在sql片段中不包括where

在statement中引用sql片段

		<where>
			<include refid="query_user"></include>
		</where>

动态sql   foreach的使用

需求:在用户查询列表和查询总数的statement中增加多个id输入查询。

sql语句 两种方法:(以下面的sql语句为例)

SELECT * FROM USER WHERE id=1 OR id=10 OR id=16

SELECT * FROM USER WHERE id IN(1,10,16)

1、在输入参数类型中添加List<Integer> ids传入多个id

2、修改sql片段 ,添加foreach片段

foreach在xml中的配置就是将sql语句拼接在xml中而已。

各个标签属性的含义:

collection;指定输入对象的集合属性,在UserQueryVo中定义的属性值是ids, 故填ids。

item:每个遍历生成的对象名称。

open:开始遍历时拼接的串。一般是 “AND(”。

close:结束遍历时拼接的串。一般是右括号

separator:遍历的两个对象中需要拼接的串。 在sql语句中ids用or拼接

另外一个sql的实现:

3、在测试类中添加测试条件即可

			userCustom.setSex("female");
			List<Integer> ids = new ArrayList<>();
			
			ids.add(29);
			ids.add(28);
			userQueryVo.setIds(ids);
			userQueryVo.setUserCustom(userCustom);

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值