1 if
 2 动态 SQL 通常要做的事情是有条件地包含 where 子句的一部分。比如:
 3 <select id="findActiveBlogWithTitleLike"
 4      resultType="Blog">
 5   SELECT * FROM BLOG 
 6   WHERE state = ‘ACTIVE’ 
 7   <if test="title != null">
 8     AND title like #{title}
 9   </if>
10 </select>
11 choose, when, otherwise
12 有些时候,我们不想用到所有的条件语句,而只想从中择其一二。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。
13 还是上面的例子,但是这次变为提供了"title"就按"title"查找,提供了"author"就按"author"查找,若两者都没有提供,就返回所有符合条件的BLOG(实际情况可能是由管理员按一定策略选出BLOG列表,而不是返回大量无意义的随机结果)。
14 <select id="findActiveBlogLike"
15      resultType="Blog">
16   SELECT * FROM BLOG WHERE state = ‘ACTIVE’
17   <choose>
18     <when test="title != null">
19       AND title like #{title}
20     </when>
21     <when test="author != null and author.name != null">
22       AND author_name like #{author.name}
23     </when>
24     <otherwise>
25       AND featured = 1
26     </otherwise>
27   </choose>
28 </select>
29 foreach
30 动态 SQL 的另外一个常用的必要操作是需要对一个集合进行遍历,通常是在构建 IN 条件语句的时候。比如:
31 <select id="selectPostIn" resultType="domain.blog.Post">
32   SELECT *
33   FROM POST P
34   WHERE ID in
35   <foreach item="item" index="index" collection="list"
36       open="(" separator="," close=")">
37         #{item}
38   </foreach>
39 </select>

 

posted on 2019-03-05 19:08  菜鸟01号  阅读(175)  评论(0编辑  收藏  举报