动态 SQL 之 <if> 标签
根据实体类的不同取值,使用不同的 SQL 语句来进行查询。比如在 id 如果不为空时可以根据 id 查询,
如果 username 不为空时还要加入用户名作为条件。
持久层 Dao 接口
List<User> findByCondition(User user);
持久层 Dao 映射配置
<select id="findByCondition" parameterType="com.fgy.domain.User" resultType="com.fgy.domain.User"> select * from user where 1=1 <if test="username != null and username != ''"> and username = #{username} </if> <if test="sex != null"> and sex = #{sex} </if> </select> 测试:
@Test public void testFindByCondition() { User user = new User(); user.setUsername(""); user.setSex("男"); List<User> users = userDao.findByCondition(user); // List<User> users = userDao.findByCondition(null); System.out.println(users); }动态 SQL 之 <where> 标签:为了简化上面 where 1=1 的条件拼装,可以采用<where>标签 持久层 Dao 映射配置
<select id="findByCondition" parameterType="com.fgy.domain.User" resultType="com.fgy.domain.User"> select * from user <where> <if test="username != null and username != ''"> and username = #{username} </if> <if test="sex != null"> and sex = #{sex} </if> </where> </select>动态标签之 <foreach> 标签 持久层 Dao 接口
List<User> findUserInIds(QueryVo vo); 持久层 Dao 映射配置
<select id="findUserInIds" parameterType="com.fgy.domain.QueryVo" resultType="com.fgy.domain.User"> select * from user <where> <if test="ids != null and ids.size() > 0"> <foreach collection="ids" open="and id in (" close=")" item="id" separator=","> #{id} </foreach> </if> </where> </select>
<foreach>标签用于遍历集合,它的属性:
collection:代表要遍历的集合元素,注意编写时不要写#{}
open:代表语句的开始部分
close:代表结束部分
item:代表遍历集合的每个元素,生成的变量名
sperator:代表分隔符
测试:
@Test public void testFindUserInIds() { QueryVo vo = new QueryVo(); List<Integer> ids = new ArrayList<>(); ids.add(1); ids.add(2); ids.add(3); vo.setIds(ids); List<User> users = userDao.findUserInIds(vo); System.out.println(users); }mybatis 中简化编写的 SQL 片段:Sql 中可将重复的 sql 提取出来,使用时用 include 引用即可,最终达到 sql 重用的目的。 定义代码片段:
<!-- 抽取重复的语句代码片段 -->
<sql id="defaultSql">
select * from user
</sql>
引用代码片段:
<!-- 配置查询所有操作 -->
<select id="findAll" resultType="user">
<include refid="defaultSql"></include>
</select>
<!-- 根据 id 查询 -->
<select id="findById" resultType="UsEr" parameterType="int">
<include refid="defaultSql"></include>
where id = #{uid}
</select>
来源:https://www.cnblogs.com/roadlandscape/p/12291457.html