Mybatis中的动态sql语句
首先写个方法
/**
* 跟进传入参数条件查询
* @param user 查询的条件:有可能有用户名,有可能有性别,也有可能有地址,还有可能都有
* @return
*/
List<User> findByCondition(User user);
if标签
对应resource中也要添加
<!--根据条件查询-->
<select id="findByCondition" resultType="com.bruce.domain.User" parameterType="user">
select * from user where 1=1
<if test="username!=null">
and username=#{username}
</if>
</select>
如果还有就继续在</if>后面添加
<if test="xxx!=null">
and xxx=#{xxx}
</if>
条件太多了的话
where 1=1看起来很别扭可以用where标签
where标签
<select id="findByCondition" resultType="com.bruce.domain.User" parameterType="user">
select * from user
<where>
<if test="username!=null">
and username=#{username}
</if>
</where>
</select>
foreach标签
传入多个 id 查询用户信息,用下边两个 sql 实现:
SELECT * FROM USERS WHERE username LIKE ‘%张%’ AND (id =10 OR id =89 OR id=16)
SELECT * FROM USERS WHERE username LIKE ‘%张%’ AND id IN (10,89,16)
这样我们在进行范围查询时,就要将一个集合中的值,作为参数动态添加进来。
SQL 语句:
select 字段 from user where id in (?)
<foreach>标签用于遍历集合,它的属性:
collection:代表要遍历的集合元素,注意编写时不要写#{}
open:代表语句的开始部分
close:代表结束部分
item:代表遍历集合的每个元素,生成的变量名
sperator:代表分隔符
创建一个实现类来存放
方法
/**
* 根据queryvo中提供的id集合,查询用户信息
* @param vo
* @return
*/
List<User> findUserInIds(QueryVo vo);
sql实现
<!--queryvo中的id集合实现查询用户列表-->
<select id="findUserInIds" resultType="user" parameterType="com.bruce.domain.QueryVo">
select * from user
<where>
<if test="ids != null and ids.size()>0">
<foreach collection="ids" open="and id in (" close=")" item="uid" separator=",">
#{uid}
</foreach>
</if>
</where>
</select>
测试方法
/**
* 测试foreach标签的使用
*/
@Test
public void testFindInIds() {
QueryVo vo = new QueryVo();
List<Integer> list = new ArrayList<Integer>();
list.add(41);
list.add(43);
list.add(46);
vo.setIds(list);
//5.执行查询一个方法
List<User> users = userDao.findUserInIds(vo);
for (User user : users) {
System.out.println(user);
}
sql标签
Sql 中可将重复的 sql 提取出来,使用时用 include 引用即可,最终达到 sql 重用的目的。
<!--抽取重复的sql语句,就可以避免每次都写select*from user
别加;要不然自动结束了如果你下面还有语句的话就不行咯
-->
<sql id="defaultUser" >
select * from user
</sql>
举例说明
<!-- 配置查询所有操作 -->
<select id="findAll" resultType="user">
<include refid="defaultSql"></include>
</select>
<!-- 根据 id 查询 -->
<select id="findById" resultType="UsEr" parameterType="int">
注意
sql语句不在乎大小写,其他的就需要注意大小写
最好是一开始就按表中统一标准去写
版权声明:本文为weixin_42727032原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。