1.MyBatis动态SQL
MyBatis 的强大特性之一便是它的动态 SQL,即拼接SQL字符串。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。
通常使用动态 SQL 不可能是独立的一部分,MyBatis 当然使用一种强大的动态 SQL 语言来改进这种情形,这种语言可以被用在任意的 SQL 映射语句中。
动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多的元素需要来了解。MyBatis 3 大大提升了它们,现在用不到原先一半的元素就可以了。MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素。
2.动态SQL标签:if,choose (when, otherwise),trim (where, set),foreach
2.1 if标签:直接上代码
<select id="queryByIdAndTitle"
resultType="Blog">
SELECT * FROM BLOG
WHERE 1=1
<if test="id!= null and title!=null">
AND id=#{
id} and title=#{
title}
</if>
</select>
注:if标签一般用于非空验证,如上例,若id为空,if标签里的代码,将不会执行,反之,则会执行。
2.2 choose(when,otherwise)标签:直接上代码
<select id="queryBy"
resultType="Blog">
SELECT * FROM BLOG WHERE 1=1
<choose>
<when test="title != null">
AND title like #{
title}
</when>
<otherwise>
AND id= 1
</otherwise>
</choose>
</select>
注:choose(when,otherwise)标签相当于switch(case,default) ,如上例,若title 为空,when标签里的代码,将不会执行,默认执行otherwise标签里面的代码。
2.3 trim(where,set)标签:直接上代码
<select id="queryBy" resultType="com.scme.pojo.User" parameterType="com.scme.pojo.User">
select * from user
<where>
<if test="username!=null and password!=null">
and username=#{
username}<