myBatis的动态sql

一.动态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”作为键。

      

原文地址:https://www.cnblogs.com/sxl920624/p/6743529.html