动态sql(重点)
mybatis重点是对sql的灵活解析和处理。
1.1需求
将自定义查询条件查询用户列表和查询用户列表总记录数改为动态sql
1.2if和where
<!-- 自定义查询条件查询用户的信息
parameterType:指定包装类型
%${userCustom.username}%:userCustom是userQueryVo中的属性,通过OGNL获取属性的值
-->
<select id="findUserList" parameterType="userQueryVo" resultType="user">
select id,username,birthday from user
<where>
<!-- where标签相当 于where关键字,可以自动去除第一个and -->
<if test="userCustom!=null">
<if test="userCustom.username!=null and userCustom.username!=''">
and username like '%${userCustom.username}%'
</if>
<if test="userCustom.sex!=null and userCustom.sex!=''">
and sex = #{userCustom.sex}
</if>clude refid="其它的sql片段"></include> -->
</if>
</where>
</select>
1.1sql片段
通过sql片段可以将通用的sql语句抽取出来,单独定义,在其它的statement中可以引用sql片段。
通用的sql语句,常用:where条件、查询列
1.1.1sql片段的定义
1.1.1 引用sql片段
foreach
在statement通过foreach遍历parameterType中的集合类型。
需求:
根据多个用户id查询用户信息。
1.1.1在userQueryVo中定义list<Integer> ids
在userQueryvo中定义list<Integer> ids存储多个id
1.1.1修改where语句
使用foreach遍历list:
<foreach collection="ids" open=" AND id IN ( " close=")" item="id" separator=",">
#{id} <!-- 16,循环 -->
</foreach>
<!--
如果拼接 SELECT id ,username ,birthday FROM USER WHERE username LIKE '%小明%' AND (开始 id = 16 OR id = 22 OR id = 25循环 )结束
<foreach collection="ids" open=" AND ( " close=")" item="id" separator="OR">
id = #{id} <!-- id = 16 ,循环 -->
</foreach>
1.1.1 测试代码