我们来讲一下为什么要使用Mybatis的动态sql ?

*因为动态sql之所以是Mybatis 的强大特性是因为我们在使用JDBC操作数据库的时候如果查询特别的多,将条件串联成sql字符串是一件很痛苦的事,而且也并不能省略逗号,而Mybatis的动态sql就为我们解决了这些麻烦,这个动态sql是基于OGNL的表达式,也可以方便我们在sql语句中实现某些逻辑。
*用于实现动态sql的核心标签如下几种:
1. if(属性:“test”用来判断条件)
利用if我们可以实现简单的条件选择可以和where标签配合使用
具体mapper.xml配置文件中的代码实现如下:


当然也可以配合if+trim使用:

我用的是List集合的dao接口查询

然后简单的在main方法里进行实现:

  1. set(没有属性 ,一般用在更新语句update上,解决动态更新语句,也可以和trim+if搭配使用)
    直接上mapper.xml配置文件代码帮助理解:


在dao接口这里要注意你使用的update更新语句,所以接口的返回类型一定得是int类型的返回值用来判断数据库中受影响的行数,参考如下:

用main方法的简单实现:

  1. foreach
    基本属性:

在mapper.xml配置文件中
item(表示集合的每个元素进行迭代时的别名)自我理解也就是说dao接口方法里的参数,
index(指定一个名称,用于表示在迭代过程中,每次迭代到的位置),
open(表示该语句以什么时候开始)既然是in条件语句,所以必然是"("开始,
separator(表示在每次进行迭代之间以什么符号作为分隔符)既然是in条件语句必然是是以","逗号作为分隔符
close(表示该语句以什么结束)所以必然是以“)”结束。
collection(他是最容易出错的属性,需格外注意该属性必须指定,不同情况下该属性的值是不一样的,总有三种情况)
1)如入参为单参数且参数类型是一个List集合的时候,collection的属性值为list。
2)如若入参为单参数且参数类型是一个数组的时候,collection的属性值为array(此处传入参数Integer[] rolelds 为数组类型,故此处collection的属性设置为“array”)
3)如若入参为多参数,就需要把他们封装为一个Map进行处理
select中返回的是一个resultMap(id=“userMapRole”),该resultMap也进行了相应的字段映射。
如下图提供了单参数为list,array多参数为Map的示例

也使用了但参数Map和多参数Map的示例如下图


下面是dao接口提供的一些示例

  1. choose
    基本属性:

when(when也是用test属性来进行条件判断的)
otherwise(这个属性自我理解成else的意思)
通常搭配 when,otherwise使用,也就是说choose相当于之前我们学习的if-esle..if-else..
(ps:这个choose标签通常可以和switch进行联想学习,但是switch一般都是等值判断,我们的choose标签就比较厉害了他可以在when属性里进行判断)
示例如下:

  1. if+trim
    基本属性(在上面我们都介绍过,他可以搭配多种标签进行使用 )

prefix:前缀(作用是通过自动识别是否有返回值后,在trim包含的内容上加上前缀)
sufix:后缀(作用是在trim包含内容上加上后缀)
prefixOverrides:对于trim标签的内容的 首部进行指定内容(如and|or)的忽略或者剔除
sufifxOverrides:对于trim包含的内容的尾部进行指定的内容的忽略
以上标签属性运行出来以后会自动为sql语句进行拼接这是trim标签的强大之处
如下图的示例观察:

我们可以观察一下我们运行出来的结果便一目了然:

9.最后我上一个 mybatis插件来实现分页的功能·
用mybatis框架实现分页功能

打开Mybatis官网http://www.mybatis.org/mybatis-3/zh/configuration.html#plugins

1)找到plugins的插件的官方说明档

2)在项目的configuration.xml的核心文件中配置plugins属性配置(如果不知道核心文件的配置顺序点击一下操作查看源码)

<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">  点击这行找到< !ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>

3)plugins属性配置

<plugins><plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"><property name="dialectType" value="mysql"/></plugin>
</plugins>

4)不知道plugins的属性interceptor的包怎么写 双击两下Shift输入Interceptor的ibatis包下的类点开

然后在main方法里创建IPage对象 然后获取getTotal()方法

6)

打开Configuration类里的newExecutor方法 然后点进去interceptorChain的类

点开pluginAll的方法你会发现 用在list集合放的是Interceptor拦截器 然后用froeach循环遍历了这个list集合调用了咱们的plugin插件。

因此

Executor就是插件拦截之一

  1. 事务**未完待续.....

Mybatis的第三章动态sql总结相关推荐

  1. MyBatis学习 之 三、动态SQL语句

    2019独角兽企业重金招聘Python工程师标准>>> 有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询出的结果很可能是空的, ...

  2. MyBatis-第三章 动态SQL

    1. 模糊查询 #{value}以?的方式传参到数据库  'value' ${id}以拼接的方式传参到数据库value 2. where 批量删除1 入参字符串 "id1,id2,id3&q ...

  3. Mybatis中输入输出映射和动态Sql

    一.输入映射 我们通过配置parameterType的值来指定输入参数的类型,这些类型可以是简单数据类型.POJO.HashMap等数据类型 1.简单类型 2.POJO包装类型 ①这是单表查询的时候传 ...

  4. 第三章 PL/SQL数据类型

    第三章 PL/SQL数据类型 一.预定义数据类型 Oracle的数据类型可以分为四类,分别是标量类型,复合类型,引用类型和LOB类型.标量类型没有内部组件:而复合类型包含了能够被单独操作的内部组件:引 ...

  5. 数据库期末总结笔记(零基础)-第三章 关系数据库SQL

    第三章 关系数据库SQL 三.SQL查询 1.基本查询格式 select [distinct] (去重)所查内容 from 所查询的表(可多个)where 要求条件 例:查计算机科学系全体学生 sel ...

  6. Mybatis的特性详解——动态SQL

    Mybatis的特性详解--动态SQL 前言 一.动态sql的元素 1.MyBatis if标签:条件判断 2.MyBatis choose.when和otherwise标签 3.MyBatis wh ...

  7. 数据库系统概念笔记——第三章:SQL

    文章目录 第三章:SQL 3.2 SQL数据定义 3.2.1 基本类型 3.2.2 基本模式定义 3.3 SQL查询的基本结构 3.3.1 单关系查询 3.3.2 多关系查询 3.3.3 自然连接 3 ...

  8. Mybatis第三天动态Sql语句、XML中一对多、多对一、多对多该怎么写

    Mybatis第三天 Mybatis中使用unpooled配置连接池原理分析 Mybatis中使用pooled配置连接的原理分析 Mybatis中的事务原理和自动提交设置 Mybatis中的动态sql ...

  9. Mybatis(三)动态SQL

    Mybatis动态SQL Mybatis的强大特征之一就是动态SQL.Mybatis采用功能强大的基于OGNL表达式来淘汰其他大部分元素.使用mybatis提供的各种标签方法实现动态拼接sql.动态传 ...

最新文章

  1. WebGoat教程学习(三)--Ajax安全
  2. 连表/子查询/计算的sql
  3. python卷积神经网络回归预测_回归[keras]的一维卷积神经网络,做
  4. 【算法竞赛学习】数字中国创新大赛智慧海洋建设-Task2数据分析
  5. Google大数据三论文
  6. python实现k core算法_python实现密度聚类(模板代码+sklearn代码)
  7. thttpd支持php吗,轻量型thttpd+php5
  8. html 图片 按钮,css按钮背景图片如何实现?(代码实例)
  9. 20190901 On Java8 第十五章 异常
  10. zoj 3581 A Simple Test 模拟题
  11. python读取HDF5数据
  12. ssm毕设项目自来水收费管理系统7yd5p(java+VUE+Mybatis+Maven+Mysql+sprnig)
  13. Python提取PDF中的信息,写入Excel
  14. Unity 崩溃问题解决方法——之一
  15. Java中巧算年龄的代码,巧算年龄 - 寂寞暴走伤的个人空间 - OSCHINA - 中文开源技术交流社区...
  16. Pycharm this applicatation failed to start because it could not find or laod the qt plaform plugin
  17. 解决Mac上用spotlight搜索输入几个字母后闪退
  18. 对接阿里云号码认证服务H5方案
  19. 稿定设计怎么去除水印?
  20. 沐风微信营销水库模型二:建设专属秘密武器库!

热门文章

  1. Java8 - 自定义实现体会CompletableFuture的原理
  2. Nginx如何启动、停止与重启
  3. linux怎么到conf目录,linux - 如何在没有.conf文件的情况下从Ubuntu下的命令行连接到WiFi? - Ubuntu问答...
  4. 微信小程序textArea组件字数限制
  5. java占位符填充_实现java中的占位符
  6. 《Python核心编程 》笔记-第二章+第三章
  7. 计算机视觉与模式识别(1)—— A4纸边缘提取
  8. 数据结构与算法(2)——栈和队列
  9. 五分钟搞清楚MySQL事务隔离级别
  10. 深入理解JVM(5)——虚拟机类加载机制