mysql 动态sql 解析_MyBatis详解5.动态SQL
字节跳动飞书内推!
北京、杭州、武汉、广州、深圳、上海,六大城市等你来投。
感兴趣的朋友可以私我咨询&内推,也可以通过链接直接投递!
海量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相关推荐
- 成本计算引擎动态规则解析技术详解
源宝导读:随着企业数字系统应用的越来越深入,业务计算方式也变的越来越复杂,灵活度要求也越来越高.本文将介绍通过将配置动态转换成可执行代码的方式,解决业务计算高度灵活化配置的技术方案. 一.背景 ERP ...
- MySQL系列---架构与SQL执行流程详解
文章目录 1. 背景 2. 架构体系 2.1 架构图 2.2 模块详解 2.3 架构分层 3. 查询SQL语句执行流程 3.1 连接 3.1.1 MySQL支持的通信协议 3.1.2 通信方式 3.2 ...
- 一文详解Mybatis动态SQL,建议收藏
一文详解Mybatis动态SQL,建议收藏 1.动态 SQL 2.IF 3.choose.when.otherwise 4.where 5.set 6.trim 7.SQL片段 8.foreach 1 ...
- mysql 批量导入sql_MySQL高效导入多个.sql文件方法详解
MySQL有多种方法导入多个.sql文件(里面是sql语句),常用的有两个命令:mysql和source. 但是这两个命令的导入效率差别很大,具体请看最后的比较. (还有sqlimport和LOAD ...
- mysql极限_SQL极限函数limit()详解分页必备
limit含义: limit英语中的含义是限制,限定的意思.小日本曾上映过一个电影就是叫limit是由漫画改编的电影,剧情很变态,但不可否认小日本由于地狭人稠的原因,在观念上的资源危机意识还是很强的哈 ...
- 深入mysql慢查询设置的详解
深入mysql慢查询设置的详解 在web开发中,我们经常会写出一些SQL语句,一条糟糕的SQL语句可能让你的整个程序都非常慢,超过10秒一般用户就会选择关闭网页,如何优化SQL语句将那些运行时间 比较 ...
- 【java学习之路】(java框架)004.Mybatis SQL映射文件详解
02Mybatis SQL映射文件详解 在之前我们学习了mybatis的全局配置文件,下面我们开始学习mybatis的映射文件,在映射文件中,可以编写以下的顶级元素标签: cache – 该命名空 ...
- 详解强大的SQL注入工具——SQLMAP
本文转自:详解强大的SQL注入工具--SQLMAP 前言 Windows下的注入工具好的又贵,免费的啊D.明小子等又不好用,我们根本没必要花 时间去找什么破解的havij.pangolin什么的,特别 ...
- linux中etc下的hosts(本地IP解析)文件详解
linux中etc下的hosts(本地IP解析)文件详解 1./etc/hosts(本地解析) 很多人一提到更改hostname首先就想到修改/etc/hosts文件, 认为hostname的配置文件 ...
最新文章
- Asp.net 2.0 C#实现压缩/解压功能
- flowable工作流_【程序源代码】Springboot开源工作流开发框架
- C++中为何构造函数不可是虚函数,而析构函数可以?
- jquery 重写 html5 验证,Jquery前端滑动验证方式功能实现
- SAP ABAP实用技巧介绍系列之 ABAP XSLT 定义变量
- java 高级泛型_Java 泛型高级
- python下载安装搭建
- excelexportentity中设置null不显示的方法_一般人不知道的线程间数据交换Exchanger
- kubernetes挂载存储
- Meta Learning | 加了元学习之后,少样本学习竟然可以变得这么简单!
- 重装上阵,全新的「极光开发者」公众号来了,关注送大礼!
- matlab实验数据拟合,利用Matlab对实验数据拟合曲线与函数方法
- 永恒不变的内容营销不利于seo
- 13.图像识别与文字处理
- 电子计算机与其它计算机工具的本质区别是,电子计算机与其他计算工具的本质区别是...
- R语言---scale函数,match函数和%in%详解
- 电子皮肤综述阅读-鲍哲南-2019
- java mysql 语句中 大于 小于 等于 的写法
- 30个最讨人喜欢的英语赞美语句
- 百万调音师—Audition 变调器
热门文章
- 自考《马克思主义基本原理概论》
- waves服务器系统盘,在Midas调音台上使用Waves插件
- 悲剧了 花一千多买的三星的固态硬盘 突然无法访问了,用了这个命令好呆又能访问了
- OPJ1.13编程基础之综合应用
- C语言实现输出1900—2000年中是闰年的年份
- 用python求正方形周长_用于正方形、矩形和ci的周长和面积的单独函数
- Mission Planner初学者安装调试教程指南(APM或PIX飞控)2——安装与更新
- android7玩法,QQ for Android v7.6.5 正式版发布 红包互动又双叒叕出新玩法
- Framework7 Vue 教程 入门 学习
- 中国的第一封电子邮件