场景一:
例如当我们想实现这样的查询的时候之前的操作貌似满足不了我们。
场景二:
还有些时候我们如果输入的信息越多满足要求的就越多,所查找出来的用户就越少
当我们之输入姓名的时候可能查找出10个人,当再输入性别的时候可能人数就会减少一半
mybatis为了解决例如上面的问题引入了一些标签例如:
<if></if> <where></where> <foreach></foreach> <when></when> <set></set>
场景一的解决:
UserDao中的方法:
QueryVo实体类:
package com.zyb.pojo; import java.util.List; public class QueryVo { private User user; private List<Integer> ids; public QueryVo() { } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public List<Integer> getIds() { return ids; } public void setIds(List<Integer> ids) { this.ids = ids; } }
对应mapper.xml的SQL语句:
<select id="selByids" resultType="user" resultMap="userMap" parameterType="com.zyb.pojo.QueryVo"> <include refid="defaultSql"></include> <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>
上面的<include refid="defaultSql"></include>是因为抽取了常用的代码段
场景二的解决:
UserDao的方法:
对应的mapper.xml的SQL语句:
<select id="selByCondition" resultType="user" resultMap="userMap" parameterType="user"> select * from my_user <where> <if test="uname!=null"> and username=#{uname} </if> <if test="userSex!=null"> and sex=#{userSex} </if> </where> </select>
set标签和if搭配使用: