SQL标签
有的时候,我们可能会将一些公共的部分抽取出来,方便使用
1. 使用SQL标签抽取公共的部分
<sql id="if-title-author">
<if test="title != null">
title = #{title}
</if>
<if test="author != null">
and author = #{author}
</if>
</sql>
2. 在需要使用的地方使用include标签引用即可
<select id="queryBlogIF" parameterType="map" resultType="blog">
select * from mybatis.blog
<where>
<include refid="if-title-author"></include>
</where>
</select>
注意事项:
· 最好基于单表来定义SQL片段
· 不要存在where标签
Foreach
select * from user where 1=1 and
<foreach item="id" collection="ids" open="(" separator="or" close=")" > #{id} </foreach>(id=1 or id=2 or id=3)
<select id="queryBlogForeach" parameterType="map" resultType="blog" >
select * from mybatis.blog
<where>
<foreach collection="ids" item="id" open="and (" close=")" separator="or">
id = #{id}
</foreach>
</where>
</select>
测试:
@Test
public void queryBlogForeach(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
HashMap map = new HashMap();
ArrayList<Integer> ids = new ArrayList<Integer>();
ids.add(1);
map.put("ids",ids);
List<Blog> blogs = mapper.queryBlogForeach(map);
for (Blog blog : blogs) {
System.out.println(blog);
}
sqlSession.close();
}
动态SQL就是在拼接SQL语句,我们只需要保证SQL语句的正确性,按照SQL的格式,去排列组合就可以了。
建议:
· 先在Mybatis中写出完整的SQL,再对应的去修改成为我们的动态SQL实现通用即可