Mybatis学习记录(五)----Mybatis的动态SQL

1.  什么是动态sql

           mybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。

     1.1 需求

       用户信息综合查询列表和用户信息查询列表总数这两个statement的定义使用动态sql。

         对查询条件进行判断,如果输入参数不为空才进行查询条件拼接。

     1.2  UserMapper.xml

clip_image001

clip_image002

      1.3  测试代码

clip_image003

2.  sql片段

       2.1 需求

          将上边实现的动态sql判断代码块抽取出来,组成一个sql片段。其它的statement中就可以引用sql片段。方便程序员进行开发。

       2.2 定义sql片段

clip_image004

      2.3 引用sql片段

         在mapper.xml中定义的statement中引用sql片段:

clip_image005

clip_image006

3.  foreach

          向sql传递数组或List,mybatis使用foreach解析

      3.1 需求

         在用户查询列表和查询总数的statement中增加多个id输入查询。

         sql语句如下:

         两种方法:

         SELECT * FROM USER WHERE id=1 OR id=4 OR id=5

         SELECT * FROM USER WHERE id IN(1,4,5)

     3.2 在输入参数类型中添加List<Integer> ids传入多个id

clip_image007

    3.3 修改mapper.xml

    WHERE id=1 OR id=4 OR id=5

      在查询条件中,查询条件定义成一个sql片段,需要修改sql片段。

clip_image008

     3.4 测试代码

clip_image009

     3.5 另外一个sql的实现:

clip_image010

4.  choose、when、otherwise

          choose元素的作用就相当于JAVA中的switch语句,基本上跟JSTL中的choose的作用和用法是一样的,通常都是与when和otherwise搭配的。

       4.1. UserMapper.xml

clip_image011

          when元素表示当when中的条件满足的时候就输出其中的内容,跟JAVA中的switch效果差不多的是按照条件的顺序,当when中有条件满足的时候,就会跳出choose,即所有的when和otherwise条件中,只有一个会输出,当所有的我很条件都不满足的时候就输出otherwise中的内容。

      4.2. UserMapper.java

clip_image012

     4.3. 测试代码

clip_image013

5.  trim、where、set

          trim元素的主要功能是可以在自己包含的内容前加上某些前缀,也可以在其后加上某些后缀,与之对应的属性是prefix和suffix;可以把包含内容的首部某些内容覆盖,即忽略,也可以把尾部的某些内容覆盖,对应的属性是prefixOverrides和suffixOverrides;

         set元素主要是用在更新操作的时候,它的主要功能和where元素其实是差不多的,主要是在包含的语句前输出一个set,然后如果包含的语句是以逗号结束的话将会把该逗号忽略,如果set包含的内容为空的话则会出错。有了set元素我们就可以动态的更新那些修改了的字段。

      5.1 UserMapper.xml

clip_image014

      5.2 UserMapper.java

clip_image015

      5.3 测试代码

clip_image016

        where元素的作用是会在写入where元素的地方输出一个where,另外一个好处是你不需要考虑where元素里面的条件输出是什么样子的,MyBatis会智能的帮你处理,如果所有的条件都不满足那么MyBatis就会查出所有的记录,如果输出后是and 开头的,MyBatis会把第一个and忽略,当然如果是or开头的,MyBatis也会把它忽略;此外,在where元素中你不需要考虑空格的问题,MyBatis会智能的帮你加上。

6.  Bind

          bind元素允许在在OGNL表达式之外创建一个变量,并且将它绑定在context上。

       6.1 UserMapper.xml

clip_image017

      6.2 UserMapper.java

clip_image018

      6.3 测试代码

clip_image019

原文地址:https://www.cnblogs.com/doctorJoe/p/5290859.html