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>