MyBatis学习笔记(五):动态SQL

传统的JDBC方法,在使用复杂SQL的时候经常需要拼接,不仅麻烦而且容易出错。MyBatisd的动态SQL技术可以通过几个标签组合出灵活的SQL语句,提高开发效率。

if、test元素

if元素用于判断语句,常与test元素配合使用。test元素用来判断真假,大部分情况用来判断非空。


choose、 when、 otherwise元素

类似于JAVA中的switch,用于多条件选择语句。


where、 trim、 set元素

前面的where后面都加了1=1,这是因为如果不加语句会有语法问题(有可能where后面紧接着and)。where元素就可以处理这种情况。看下面的例子,表面上看只是多了一个标签,但实际上它后面出现and或or这些字段的时候,它知道如何处理。


trim标签也可以实现。下面的例子的意思是当where后面紧随and或者or的化,就去掉它们。


    ...

和where一样,set元素也是解决set语句的问题(有可能set后面紧接逗号)。


   update t_heroes
     
        
            hero_name = #{heroName},
        
        
            hero_title = #{heroTitle}
        
    
    where id = #{id}

同样,上面set语句中的逗号问题也可以使用trim解决。

foreach元素

foreach元素是一个循环语句,用来遍历集合,往往用于SQL中的in关键字。


foreach用法相对复杂,大概解释一下。

  • collection 传递进来的集合参数的名称。
  • item 循环中当前的元素。
  • index 当前元素在集合位置的下标。
  • open和close 以什么符号将这些集合中的元素包含起来。
  • separator 各个元素的间隔符。

bind元素

bind元素是通过OGNL表达式去自定义一个上下文变量。在进行模糊查询的时候,MySQL数据库会使用concat,与“%”和参数相连,Oracle数据库会使用连接符号“||”。有了bind元素,就不必使用数据库语言,增强了可移植性。


绑定2个新变量p_heroName和p_heroTitle,可以在SQL的其它地方使用。

你可能感兴趣的:(MyBatis学习笔记(五):动态SQL)