Mybatis 动态 sql 详解
MyBatis 的动态 SQL 是基于 OGNL 表达式的,它可以帮助我们方便的在 SQL 语句中实现某些
逻辑。
MyBatis 中用于实现动态 SQL 的元素主要有:
if 就是简单的条件判断,利用 if 语句我们可以实现某些简单的条件选择。先来看如下一个例子:
1. <selectid="dynamicIfTest"parameterType="Blog"resultType="Blog">
2. select*fromt_blogwhere1=1
3. <iftest="title!=null">
4. andtitle=#{title}
5. </if>
6. <iftest="content!=null">
7. andcontent=#{content}
8. </if>
9. <iftest="owner!=null">
10. andowner=#{owner}
11. </if>
12. </select>
这条语句的意思非常简单,如果你提供了 title 参数,那么就要满足 title=#{title},同样如果
你提供了 Content 和 Owner 的时候,它们也需要满足相应的条件,之后就是返回满足这些条
件的所有 Blog,这是非常有用的一个功能,以往我们使用其他类型框架或者直接使用 JDBC 的
时候, 如果我们要达到同样的选择效果的时候,我们就需要拼 SQL 语句,这是极其麻烦的,
比起来,上述的动态 SQL 就要简单多了。
choose 元素的作用就相当于 JAVA 中的 switch 语句,基本上跟 JSTL 中的 choose 的作用和
用法是一样的,通常都是与 when 和 otherwise 搭配的。看如下一个例子:
1. <selectid="dynamicChooseTest"parameterType="Blog"resultType="Blo
g">
2. select*fromt_blogwhere1=1
3. <choose>
4. <whentest="title!=null">
5. andtitle=#{title}
6. </when>
7. <whentest="content!=null">
8. andcontent=#{content}