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}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值