mybatis动态sql答题.doc
文本预览下载声明
1.?
MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑。
MyBatis中用于实现动态SQL的元素主要有:
?
if
choose(when,otherwise)
trim
where
set
foreach
if就是简单的条件判断,利用if语句我们可以实现某些简单的条件选择。先来看如下一个例子:
Xml代码 ?
select?id=dynamicIfTest?parameterType=Blog?resultType=Blog??
????select?*?from?t_blog?where?11?=?1??
????if?test=title?!=?null??
????????and?title?=?#{title}??
????/if??
????if?test=content?!=?null??
????????and?content?=?#{content}??
????/if??
????if?test=owner?!=?null??
????????and?owner?=?#{owner}??
????/if??
/select??
这条语句的意思非常简单,如果你提供了title参数,那么就要满足title=#{title},同样如果你提供了Content和 Owner的时候,它们也需要满足相应的条件,之后就是返回满足这些条件的所有Blog,这是非常有用的一个功能,以往我们使用其他类型框架或者直接使用 JDBC的时候, 如果我们要达到同样的选择效果的时候,我们就需要拼SQL语句,这是极其麻烦的,比起来,上述的动态SQL就要简单多了。
choose元素的作用就相当于JAVA中的switch语句,基本上跟JSTL中的choose的作用和用法是一样的,通常都是与when和otherwise搭配的。看如下一个例子:
Xml代码 ?
select?id=dynamicChooseTest?parameterType=Blog?resultType=Blog??
????select?*?from?t_blog?where?11?=?1???
????choose??
????????when?test=title?!=?null??
????????????and?title?=?#{title}??
????????/when??
????????when?test=content?!=?null??
????????????and?content?=?#{content}??
????????/when??
????????otherwise??
????????????and?owner?=?owner1??
????????/otherwise??
????/choose??
/select??
when元素表示当when中的条件满足的时候就输出其中的内容,跟JAVA中的switch效果差不多的是按照条件的顺序,当when中有条 件满足的时候???就会跳出choose,即所有的when和otherwise条件中,只有一个会输出,当所有的都不满足的时候就输出 otherwise中的内容。所以上述语句的意思非常简单, 当title!=null的时候就输出and titlte = #{title},不再往下判断条件,当title为空且content!=null的时候就输出and content = #{content},当所有条件都不满足的时候就输出otherwise中的内容。
where语句的作用主要是简化SQL语句中where中的条件判断的,先看一个例子,再解释一下where的好处。
Xml代码 ?
select?id=dynamicWhereTest?parameterType=Blog?resultType=Blog??
????select?*?from?t_blog???
????where??
????????if?test=title?!=?null??
????????????title?=?#{title}??
????????/if??
????????if?test=content?!=?null??
????????????and?content?=?#{content}??
????????/if??
????????if?test=owner?!=?null??
????????????and?owner?=?#{owner}??
????????/if??
????/where??
/select??
?where元素的作用是会在写入where元素的地方输出一个where,另外一个好处是你不需要考虑where元素里面的条件输出是什么样 子
显示全部