1. if:值为真,才拼接
<select id="findUserById" resultType="user">
select * from user where
<if test="id != null">
id=#{id}
</if>
and deleteFlag=0;
</select>
2. where:动态干掉多余的where或者and或者or
<select id="findUserById" resultType="user">
select * from user
<where>
<if test="id != null">
id=#{id}
</if>
and deleteFlag=0;
</where>
</select>
3. trim:修剪
上面的where标签,其实可以用trim来表示:当where后面紧跟and 或者or的时候,去掉and或者or
<trim prefix="WHERE" prefixOverrides="AND |OR ">
...
</trim>
还有set标签,也可以用trim来表示:当set后面紧跟,的时候,可以去掉,
<trim prefix="SET" suffixOverrides=",">
...
</trim>
4. foreach:遍历
<select id="selectPostIn" resultType="domain.blog.Post">
SELECT *
FROM POST P
WHERE ID in
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
</select>
5. choose when:选择
<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
<choose>
<when test="title != null">
AND title like #{title}
</when>
<when test="author != null and author.name != null">
AND author_name like #{author.name}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
</select>