mybatis使用mapper配置条件语句sql时根据条件判断使用不同的参数和处理方式,常常用到 if 和 choose when,容易弄混淆,为什么有了if还要使用choose when呢,我觉得如果if还有else标签的话就不需要choose when了。if和choose when的用法如下:
一、if(通过“title”和“book”两个参数进行可选搜索):
-
<select id="findBookLike"
-
resultType=
"Book">
-
SELECT * FROM BOOK WHERE state = ‘ACTIVE’
-
<if test="title != null">
-
AND title like #{title}
-
</if>
-
<if test="book != null and book.name != null">
-
AND book_name like #{book.name}
-
</if>
-
</select>
二、choose(我们不想应用到所有的条件语句,而只想从中择其一项):
-
<select id="findActiveBookLike"
-
resultType=
"Book">
-
SELECT * FROM BOOK WHERE state = ‘ACTIVE’
-
<choose>
-
<when test="title != null">
-
AND title like #{title}
-
</when>
-
<when test="book != null and book.name != null">
-
AND book_name like #{book.name}
-
</when>
-
<otherwise>
-
AND type = 1
-
</otherwise>
-
</choose>
-
</select>