一.动态Sql:
1.概念:MyBatis的一个强大的特性之一就是它的动态SQL能力。MyBatis采用功能强大的基于OGNL的表达式来消除其它元素。
2.if标签:
在动态sql中所做的最通用的事情是包含部分where字句的条件。比如:
1 <select id="findActiveBlogWithTitleLike" 2 parameterType="Blog" resultType="Blog"> 3 SELECT * FROM BLOG 4 WHERE state = ‘ACTIVE’ 5 <if test="title != null"> 6 AND title like #{title} 7 </if> 8 </select>
//这条语句会提供一个可选的文本查找功能。如果你没有传递 title,那么所有激活的博客 都会被返回。但是如果你传递了 title,那么就会查找相近的 title(对于敏锐的检索,这中情 况下你的参数值需要包含任意的遮掩或通配符)的博客。
注意:test属性是判断条件,它的值与传入参数有关
3.choose标签:
该标签其实相当于java中的switch语句
它有两个子标签when和otherwise
1 <select id="findActiveBlogLike" 2 parameterType="Blog" resultType="Blog"> 3 SELECT * FROM BLOG WHERE state = ‘ACTIVE’ 4 <choose> 5 <when test="title != null"> 6 AND title like #{title} 7 </when> 8 <when test="author != null and author.name != null"> 9 AND author_name like #{author.name} 10 </when> 11 <otherwise> 12 AND featured = 1 13 </otherwise> 14 </choose> 15 </select>
//现在我们来搜索当 title 提供时仅有 title 条件,当 author 提 供时仅有 author 条件。如果二者都没提供,只返回 featured blogs(也许是由管理员策略地选 择的结果列表,而不是返回大量没有意义的随机博客结果列表)。
4.foreach标签:
该标签的作用是迭代一个集合,通常是构建在IN条件中的。
1 <select id="selectPostIn" resultType="domain.blog.Post"> 2 SELECT * 3 FROM POST P 4 WHERE ID in 5 <foreach item="item" index="index" collection="list" 6 open="(" separator="," close=")"> 7 #{item} 8 </foreach> 9 </select>
foreach元素是非常强大的,它允许你指定一个集合,声明集合项和索引变量,他们可以用在元素体内,它也允许你指定开放和关闭字符串,在迭代之间放置分隔符。这个元素是很智能的,它不会偶然的附加多余的分隔符。
注意:你可以传递一个List实例或者数组作为参数对象传给MyBatis.当你这么做的时候,MyBatis会自动将它包装在一个Map中,用名称作为键。List实例将会以“list”作为键,而数组实例将会以“array”作为键。