<!-- 用户信息综合查询 #{userCustom.sex}:取出pojo包装对象中性别值 ${userCustom.username}:取出pojo包装对象中用户名称 --> <selectid="findUserList"parameterType="com.iot.mybatis.po.UserQueryVo" resultType="com.iot.mybatis.po.UserCustom"> SELECT * FROM user <!-- where 可以自动去掉条件中的第一个and --> <where> <iftest="userCustom!=null"> <iftest="userCustom.sex!=null and userCustom.sex != '' "> AND user.sex=#{userCustom.sex} </if> <iftest="userCustom.username!=null and userCustom.username != '' "> AND user.username LIKE '%${userCustom.username}%' </if> </if> </where>
</select>
<!-- 用户信息综合查询总数 parameterType:指定输入类型和findUserList一样 resultType:输出结果类型 --> <selectid="findUserCount"parameterType="com.iot.mybatis.po.UserQueryVo"resultType="int"> SELECT count(*) FROM user <where> <iftest="userCustom!=null"> <iftest="userCustom.sex!=null and userCustom.sex != '' "> AND user.sex=#{userCustom.sex} </if> <iftest="userCustom.username!=null and userCustom.username != '' "> AND user.username LIKE '%${userCustom.username}%' </if> </if> </where> </select>
<!-- 定义sql片段 id:sql片段的唯 一标识 经验:是基于单表来定义sql片段,这样话这个sql片段可重用性才高 在sql片段中不要包括 where --> <sqlid="query_user_where"> <iftest="userCustom!=null"> <iftest="userCustom.sex!=null and userCustom.sex!=''"> AND user.sex = #{userCustom.sex} </if> <iftest="userCustom.username!=null and userCustom.username!=''"> AND user.username LIKE '%${userCustom.username}%' </if> </if> </sql>
引用sql片段:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
<!-- 用户信息综合查询 #{userCustom.sex}:取出pojo包装对象中性别值 ${userCustom.username}:取出pojo包装对象中用户名称 --> <selectid="findUserList"parameterType="com.iot.mybatis.po.UserQueryVo" resultType="com.iot.mybatis.po.UserCustom"> SELECT * FROM user <!-- where 可以自动去掉条件中的第一个and --> <where> <!-- 引用sql片段 的id,如果refid指定的id不在本mapper文件中,需要前边加namespace --> <includerefid="query_user_where"></include> <!-- 在这里还要引用其它的sql片段 --> </where> </select>
foreach标签
向sql传递数组或List,mybatis使用foreach解析
在用户查询列表和查询总数的statement中增加多个id输入查询。两种方法,sql语句如下:
SELECT * FROM USER WHERE id=1 OR id=10 OR id=16
SELECT * FROM USER WHERE id IN(1,10,16)