动态sql
通过mybatis提供的各种标签方法实现动态拼接sql。
If
select * from userwhere 1=1and id=#{id}and username like '%${username}%'
注意要做不等于空字符串校验。
Where
上边的sql也可以改为:
select * from userand id=#{id}and username like '%${username}%'可以自动处理第一个and。
foreach
向sql传递数组或List,mybatis使用foreach解析,如下:
需求
传入多个id查询用户信息,用下边两个sql实现:
SELECT * FROM USERS WHERE username LIKE '%张%' AND (id =10 OR id =89 OR id=16)SELECT * FROM USERS WHERE username LIKE '%张%' id IN (10,89,16)
在pojo中定义list属性ids存储多个用户id,并添加getter/setter方法
mapper.xml
separator="," >#{id}- 测试代码:List ids = new ArrayList();ids.add(1);//查询id为1的用户ids.add(10); //查询id为10的用户queryVo.setIds(ids);List list = userMapper.findUserList(queryVo);
Sql片段
Sql中可将重复的sql提取出来,使用时用include引用即可,最终达到sql重用的目的,如下:
select * from userand id=#{id}and username like '%${username}%'
将where条件抽取出来:
and id=#{id}and username like '%${username}%'
使用include引用:
select * from user
注意:如果引用其它mapper.xml的sql片段,则在引用时需要加上namespace,如下:
<include refid="namespace.sql片段”/>