字节跳动飞书内推!

北京、杭州、武汉、广州、深圳、上海,六大城市等你来投。

感兴趣的朋友可以私我咨询&内推,也可以通过链接直接投递!

海量HC,极速响应,快来和我成为同事吧。

今日头条、抖音、Tik Tok也可以内推~

1 概述

MyBatis提供了对SQL语句动态的组装能力,大量的判断都可以在 MyBatis的映射XML文件里面配置,以达到许多我们需要大量代码才能实现的功能,大大减少了我们编写代码的工作量。

动态SQL的元素

元素

作用

备注

if

判断语句

单条件分支判断

choose、when、otherwise

相当于Java中的 case when语句

多条件分支判断

trim、where、set

辅助元素

用于处理一些SQL拼装问题

foreach

循环语句

在in语句等列举条件常用

2 if元素

if元素相当于Java中的if语句,它常常与test属性联合使用。现在我们要根据name去查找学生,但是name是可选的,如下所示:

SELECT * FROM student

WHERE 1=1

AND name LIKE concat('%', #{name}, '%')

3 choose、when、otherwise元素

有些时候我们还需要多种条件的选择,在Java中我们可以使用switch、case、default语句,而在映射器的动态语句中可以使用choose、when、otherwise元素。

SELECT * FROM student

WHERE 1=1

AND name LIKE concat('%', #{name}, '%')

AND id = #{id}

4 where元素

上面的select语句我们加了一个1=1的绝对true的语句,目的是为了防止语句错误,变成SELECT * FROM student WHERE这样where后没有内容的错误语句。这样会有点奇怪,此时可以使用元素。

SELECT * FROM student

name LIKE concat('%', #{name}, '%')

5 trim元素

有时候我们要去掉一些特殊的SQL语法,比如常见的and、or,此时可以使用trim元素。trim元素意味着我们需要去掉一些特殊的字符串,prefix代表的是语句的前缀,而prefixOverrides代表的是你需要去掉的那种字符串,suffix表示语句的后缀,suffixOverrides代表去掉的后缀字符串。

SELECT * FROM student

AND name LIKE concat('%', #{name}, '%')

AND id = #{id}

6 set元素

在update语句中,如果我们只想更新某几个字段的值,这个时候可以使用set元素配合if元素来完成。注意:set元素遇到,会自动把,去掉。

UPDATE student

name = #{name},

sex = #{sex}

WHERE id = #{id}

7 foreach元素

foreach元素是一个循环语句,它的作用是遍历集合,可以支持数组、List、Set接口。

SELECT * FROM student

WHERE name IN

#{item}

collection配置的是传递进来的参数名称

item配置的是循环中当前的元素。

index配置的是当前元素在集合的位置下标。

open和 close配置的是以什么符号将这些集合元素包装起来。

separator是各个元素的间隔符。

8 bind元素

bind元素的作用是通过OGNL表达式去自定义一个上下文变量,这样更方便我们使用。在我们进行模糊查询的时候,如果是MySQL数据库,我们常常用到的是一个concat用“%”和参数相连接;然而在Oracle数据库则是用连接符号“||”,这样SQL就需要提供两种形式去实现。但是有了bind元素,我们就完全不必使用数据库的语言,只要使用MyBatis的语言即可与所需参数相连。

SELECT * FROM student WHERE name LIKE #{pattern}

mysql 动态sql 解析_MyBatis详解5.动态SQL相关推荐

  1. 成本计算引擎动态规则解析技术详解

    源宝导读:随着企业数字系统应用的越来越深入,业务计算方式也变的越来越复杂,灵活度要求也越来越高.本文将介绍通过将配置动态转换成可执行代码的方式,解决业务计算高度灵活化配置的技术方案. 一.背景 ERP ...

  2. MySQL系列---架构与SQL执行流程详解

    文章目录 1. 背景 2. 架构体系 2.1 架构图 2.2 模块详解 2.3 架构分层 3. 查询SQL语句执行流程 3.1 连接 3.1.1 MySQL支持的通信协议 3.1.2 通信方式 3.2 ...

  3. 一文详解Mybatis动态SQL,建议收藏

    一文详解Mybatis动态SQL,建议收藏 1.动态 SQL 2.IF 3.choose.when.otherwise 4.where 5.set 6.trim 7.SQL片段 8.foreach 1 ...

  4. mysql 批量导入sql_MySQL高效导入多个.sql文件方法详解

    MySQL有多种方法导入多个.sql文件(里面是sql语句),常用的有两个命令:mysql和source. 但是这两个命令的导入效率差别很大,具体请看最后的比较. (还有sqlimport和LOAD ...

  5. mysql极限_SQL极限函数limit()详解分页必备

    limit含义: limit英语中的含义是限制,限定的意思.小日本曾上映过一个电影就是叫limit是由漫画改编的电影,剧情很变态,但不可否认小日本由于地狭人稠的原因,在观念上的资源危机意识还是很强的哈 ...

  6. 深入mysql慢查询设置的详解

    深入mysql慢查询设置的详解 在web开发中,我们经常会写出一些SQL语句,一条糟糕的SQL语句可能让你的整个程序都非常慢,超过10秒一般用户就会选择关闭网页,如何优化SQL语句将那些运行时间 比较 ...

  7. 【java学习之路】(java框架)004.Mybatis SQL映射文件详解

    02Mybatis SQL映射文件详解 ​ 在之前我们学习了mybatis的全局配置文件,下面我们开始学习mybatis的映射文件,在映射文件中,可以编写以下的顶级元素标签: cache – 该命名空 ...

  8. 详解强大的SQL注入工具——SQLMAP

    本文转自:详解强大的SQL注入工具--SQLMAP 前言 Windows下的注入工具好的又贵,免费的啊D.明小子等又不好用,我们根本没必要花 时间去找什么破解的havij.pangolin什么的,特别 ...

  9. linux中etc下的hosts(本地IP解析)文件详解

    linux中etc下的hosts(本地IP解析)文件详解 1./etc/hosts(本地解析) 很多人一提到更改hostname首先就想到修改/etc/hosts文件, 认为hostname的配置文件 ...

最新文章

  1. Asp.net 2.0 C#实现压缩/解压功能
  2. flowable工作流_【程序源代码】Springboot开源工作流开发框架
  3. C++中为何构造函数不可是虚函数,而析构函数可以?
  4. jquery 重写 html5 验证,Jquery前端滑动验证方式功能实现
  5. SAP ABAP实用技巧介绍系列之 ABAP XSLT 定义变量
  6. java 高级泛型_Java 泛型高级
  7. python下载安装搭建
  8. excelexportentity中设置null不显示的方法_一般人不知道的线程间数据交换Exchanger
  9. kubernetes挂载存储
  10. Meta Learning | 加了元学习之后,少样本学习竟然可以变得这么简单!
  11. 重装上阵,全新的「极光开发者」公众号来了,关注送大礼!
  12. matlab实验数据拟合,利用Matlab对实验数据拟合曲线与函数方法
  13. 永恒不变的内容营销不利于seo
  14. 13.图像识别与文字处理
  15. 电子计算机与其它计算机工具的本质区别是,电子计算机与其他计算工具的本质区别是...
  16. R语言---scale函数,match函数和%in%详解
  17. 电子皮肤综述阅读-鲍哲南-2019
  18. java mysql 语句中 大于 小于 等于 的写法
  19. 30个最讨人喜欢的英语赞美语句
  20. 百万调音师—Audition 变调器

热门文章

  1. 自考《马克思主义基本原理概论》
  2. waves服务器系统盘,在Midas调音台上使用Waves插件
  3. 悲剧了 花一千多买的三星的固态硬盘 突然无法访问了,用了这个命令好呆又能访问了
  4. OPJ1.13编程基础之综合应用
  5. C语言实现输出1900—2000年中是闰年的年份
  6. 用python求正方形周长_用于正方形、矩形和ci的周长和面积的单独函数
  7. Mission Planner初学者安装调试教程指南(APM或PIX飞控)2——安装与更新
  8. android7玩法,QQ for Android v7.6.5 正式版发布 红包互动又双叒叕出新玩法
  9. Framework7 Vue 教程 入门 学习
  10. 中国的第一封电子邮件