Mybatis 动态SQL(四)choose语句和Foreach语句
动态SQL—choose
有时候,我们不想用到所有的查询条件,只想选择其中的一个,查询条件有一个满足即可,使用 choose标签可以解决此类问题,类似于 Java 的 switch 语句。
- 编写接口方法
List<Blog> queryBlogChoose(Map map);
- sql配置文件
<select id="queryBlogChoose" resultType="blog" parameterType="map">
select * from mybatis.blog
<where>
<choose>
<when test="title!=null">
title=#{title};
</when>
<when test="author!=null">
and author=#{author}
</when>
<otherwise>
and views=#{views};
</otherwise>
</choose>
</where>
</select>
- 测试类
@Test
public void queryBlogChoose(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
HashMap hashMap = new HashMap();
// hashMap.put("views","9999");
hashMap.put("title","Mybatis如此简单");
List<Blog> blogs = mapper.queryBlogChoose(hashMap);
for (Blog blog : blogs) {
System.out.println(blog);
}
sqlSession.close();
}
动态SQL—Foreach
需求:我们需要查询 blog 表中 id 分别为1,2,3的博客信息
- 编写接口
List<Blog> queryBlogForeach(Map map);
- 编写SQL语句
<select id="queryBlogForeach" parameterType="map" resultType="blog">
select * from mybatis.blog
<where>
<foreach collection="ids" item="id" open=" (" close=")" separator="or">
id=#{id}
</foreach>
</where>
</select>
- 测试
@Test
public void queryBlogForeach()
{
SqlSession sqlSession = MybatisUtils.getSqlSession();
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
HashMap hashMap = new HashMap();
ArrayList<Integer> ids = new ArrayList<>();
ids.add(1);
ids.add(2);
hashMap.put("ids",ids);
mapper.queryBlogForeach(hashMap);
sqlSession.close();
}
总结:动态SQL就是在拼接SQL语句,我们只要保证SQL的正确性,按照SQL的格式,去排列组合就可以了
建议:
- 先在Mysql语句中写出完整的SQL,再对应的去修改成为我们的动态SQL实现通用即可~