zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    CSS尺寸单位 % px em rem 详解
    【MySQL】mysql在Windows下使用mysqldump命令备份数据库
    CSS教程:vlink,alink,link和a:link
    正则表达式入门教程
    【MySQL】MySQL支持的数据类型
    iOS应用程序状态图
    Java开发
    Java开发
    iOS开发点滴
    Android开发点滴
  • 原文地址:https://www.cnblogs.com/doctorJoe/p/5290859.html
Copyright © 2011-2022 走看看