动态语句
MyBatis动态语句是MyBatis最强大的特性之一,通过动态语句,我们可以更方便地编写SQL语句。
MyBatis中的动态语句主要包括:if、choose(when、otherwise)、trim(where、set)、foreach。
if
含义就像编程语言中的if一样,用于进行条件判断。
例如:
如果没有传入name,那么只会对gender进行匹配,否则对name也进行匹配。
choose、when、otherwise
含义就像编程语言中的switch一样,用于分支选择。
例如:
如果没有传入name,就会检查address,如果address也没有传入,那么就会进入otherwise分支。
trim(where、set)
前面的例子中,where后面必然会跟一个条件gender = #{gender}
,但如果我们将这个条件也放入if中呢。
那么最后的sql就有可能是这样:
很显然上述sql语句都包含语法错误。
-
通过使用where
当where标签有返回值时,会自动在前面插入一个where,返回内容以and或or开头的话会剔除掉。这样就保证了sql语句的正确性。
-
通过使用trim
除了使用where之外,还可以使用trim
除了在where后的条件之外,还有一种类似的情况,是在update语句中的set后,只有当传入的值非空才更新。
如:
当set标签返回值以,结尾时可以自动剔除。
除了使用set标签外,也可以使用trim
foreach
当传入的参数是一个集合时,我们可以通过foreach标签很方便对其进行遍历。
注意:当传入参数为List时,collection的值为list,为数组时,collection的值为array,当然也可以通过在参数上加@Param("ids")注解指定名字(上述例子就是)。