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