Mybatis的第三章动态sql总结
我们来讲一下为什么要使用Mybatis的动态sql ?
*因为动态sql之所以是Mybatis 的强大特性是因为我们在使用JDBC操作数据库的时候如果查询特别的多,将条件串联成sql字符串是一件很痛苦的事,而且也并不能省略逗号,而Mybatis的动态sql就为我们解决了这些麻烦,这个动态sql是基于OGNL的表达式,也可以方便我们在sql语句中实现某些逻辑。
*用于实现动态sql的核心标签如下几种:
1. if(属性:“test”用来判断条件)
利用if我们可以实现简单的条件选择可以和where标签配合使用
具体mapper.xml配置文件中的代码实现如下:
当然也可以配合if+trim使用:
我用的是List集合的dao接口查询
然后简单的在main方法里进行实现:
- set(没有属性 ,一般用在更新语句update上,解决动态更新语句,也可以和trim+if搭配使用)
直接上mapper.xml配置文件代码帮助理解:
在dao接口这里要注意你使用的update更新语句,所以接口的返回类型一定得是int类型的返回值用来判断数据库中受影响的行数,参考如下:
用main方法的简单实现:
- 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接口提供的一些示例
- choose
基本属性:
when(when也是用test属性来进行条件判断的)
otherwise(这个属性自我理解成else的意思)
通常搭配 when,otherwise使用,也就是说choose相当于之前我们学习的if-esle..if-else..
(ps:这个choose标签通常可以和switch进行联想学习,但是switch一般都是等值判断,我们的choose标签就比较厉害了他可以在when属性里进行判断)
示例如下:
- 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就是插件拦截之一
- 事务**未完待续.....
Mybatis的第三章动态sql总结相关推荐
- MyBatis学习 之 三、动态SQL语句
2019独角兽企业重金招聘Python工程师标准>>> 有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询出的结果很可能是空的, ...
- MyBatis-第三章 动态SQL
1. 模糊查询 #{value}以?的方式传参到数据库 'value' ${id}以拼接的方式传参到数据库value 2. where 批量删除1 入参字符串 "id1,id2,id3&q ...
- Mybatis中输入输出映射和动态Sql
一.输入映射 我们通过配置parameterType的值来指定输入参数的类型,这些类型可以是简单数据类型.POJO.HashMap等数据类型 1.简单类型 2.POJO包装类型 ①这是单表查询的时候传 ...
- 第三章 PL/SQL数据类型
第三章 PL/SQL数据类型 一.预定义数据类型 Oracle的数据类型可以分为四类,分别是标量类型,复合类型,引用类型和LOB类型.标量类型没有内部组件:而复合类型包含了能够被单独操作的内部组件:引 ...
- 数据库期末总结笔记(零基础)-第三章 关系数据库SQL
第三章 关系数据库SQL 三.SQL查询 1.基本查询格式 select [distinct] (去重)所查内容 from 所查询的表(可多个)where 要求条件 例:查计算机科学系全体学生 sel ...
- Mybatis的特性详解——动态SQL
Mybatis的特性详解--动态SQL 前言 一.动态sql的元素 1.MyBatis if标签:条件判断 2.MyBatis choose.when和otherwise标签 3.MyBatis wh ...
- 数据库系统概念笔记——第三章:SQL
文章目录 第三章:SQL 3.2 SQL数据定义 3.2.1 基本类型 3.2.2 基本模式定义 3.3 SQL查询的基本结构 3.3.1 单关系查询 3.3.2 多关系查询 3.3.3 自然连接 3 ...
- Mybatis第三天动态Sql语句、XML中一对多、多对一、多对多该怎么写
Mybatis第三天 Mybatis中使用unpooled配置连接池原理分析 Mybatis中使用pooled配置连接的原理分析 Mybatis中的事务原理和自动提交设置 Mybatis中的动态sql ...
- Mybatis(三)动态SQL
Mybatis动态SQL Mybatis的强大特征之一就是动态SQL.Mybatis采用功能强大的基于OGNL表达式来淘汰其他大部分元素.使用mybatis提供的各种标签方法实现动态拼接sql.动态传 ...
最新文章
- WebGoat教程学习(三)--Ajax安全
- 连表/子查询/计算的sql
- python卷积神经网络回归预测_回归[keras]的一维卷积神经网络,做
- 【算法竞赛学习】数字中国创新大赛智慧海洋建设-Task2数据分析
- Google大数据三论文
- python实现k core算法_python实现密度聚类(模板代码+sklearn代码)
- thttpd支持php吗,轻量型thttpd+php5
- html 图片 按钮,css按钮背景图片如何实现?(代码实例)
- 20190901 On Java8 第十五章 异常
- zoj 3581 A Simple Test 模拟题
- python读取HDF5数据
- ssm毕设项目自来水收费管理系统7yd5p(java+VUE+Mybatis+Maven+Mysql+sprnig)
- Python提取PDF中的信息,写入Excel
- Unity 崩溃问题解决方法——之一
- Java中巧算年龄的代码,巧算年龄 - 寂寞暴走伤的个人空间 - OSCHINA - 中文开源技术交流社区...
- Pycharm this applicatation failed to start because it could not find or laod the qt plaform plugin
- 解决Mac上用spotlight搜索输入几个字母后闪退
- 对接阿里云号码认证服务H5方案
- 稿定设计怎么去除水印?
- 沐风微信营销水库模型二:建设专属秘密武器库!
热门文章
- Java8 - 自定义实现体会CompletableFuture的原理
- Nginx如何启动、停止与重启
- linux怎么到conf目录,linux - 如何在没有.conf文件的情况下从Ubuntu下的命令行连接到WiFi? - Ubuntu问答...
- 微信小程序textArea组件字数限制
- java占位符填充_实现java中的占位符
- 《Python核心编程 》笔记-第二章+第三章
- 计算机视觉与模式识别(1)—— A4纸边缘提取
- 数据结构与算法(2)——栈和队列
- 五分钟搞清楚MySQL事务隔离级别
- 深入理解JVM(5)——虚拟机类加载机制