Mybatis动态SQL

1.<if>标签

这个标签主要就是用来解决是否拼接一段SQL语句

数据库

假设我现在需要查询操作

我的后端如果使用静态的sql查询

这里的username,age,phone都是可选的传参,如果这个时候前端只传输了一个数据,那么其他的这个时候都是null,那么这个SQL语句就存在语法错误,就会执行失败。

如何解决

使用if标签

这里我使用的SQL语句是select * from user_info where 1=1

为什么要这样写,首先,使用1=1先保底,否则如果用户没有输入任何东西,那么这个where会存在,也是会报错,后续只要用户输入其中的任何一个都会被if标签识别到,把if标签内部的拼接到SQL语句中去

举例

如果用户只输入了用户名

SQL:select * from user_info where 1=1 and username ='输入的'

这样就避免了静态sql带来的问题,可以完美的解决问题

插入举例

插入一个数据的时候,就先判断有没有这个输入的值,没有这个输入的值就不进行拼接,有这个值就进行拼接,上面的if是判断有没有输入,下面的if是如果有输入就进行取值,无输入就不管

这里又衍伸出了一个问题

如果我只输入了password会怎么样

SQL语句:insert into user_info (password,)values(#{password,})

这里会产生逗号,这样的SQL语句很明显也是错误的,那如何把他解决?

<trim>标签

Trim标签一共有四个功能:

prefix表示在整个语句块的前面加东西

suffix表示在整个语句块之后加东西

prefixoverrides表示在整个语句块之前删去东西

suffixoverrides表示在整个语句块之后删去东西

语句块:被trim标签包裹的代码称之为语句块

这里首先可以看到,我把()去掉了,使用trim的标签去添加,其次无论我之后写入这几个参数中的其中任意一个,都不会出现多一个,的问题,因为trim标签帮我解决

Where标签

在不使用where标签的情况下,很容易就会出现where写在外面,后续的第一个输入不需要使用and,后续的需要,如果没有输入第一个的话,那么后面输入的就会导致语法错误因为where后面直接跟着and了

使用where标签

Where标签,当内部有元素的时候,才会插入where子句,并且会自动去掉and或者or

Set标签

不使用set标签,这个时候如果传入其中一个,比如password,就会导致SQL语句报错,因为多了个逗号,如果不想使用set标签也可以使用trim标签

使用set标签

使用set标签,会自动把内部的逗号去掉,就不会出现之前的SQL报错的问题

Foreach标签

Foreach标签主要是针对集合进行遍历的

Collection 绑定参数中的集合

Close语句块结束的字符串

Item遍历的每一个对象

Open语句块开头的字符串

Separator 字符串之间间隔的字符串

Collection会绑定你传输进来的集合类型,item是你遍历数据时,里面每个叫啥,separate表示的是中间的分割符是啥,open表示开始的标记是什么,close表示的是关闭的标记是啥

如果传输的是一个对象咋办

有没有很奇怪的点,这里怎么没有open和close,这个是因为传输对象的时候,结束和开始是不确定的,要看客户端传过来的,我们会自己手动加上()用来区分一个的结束

SQL标签

把常用到的SQL语句变成一个sql标签,同时起名字

这样在下次调用的时候,就可以直接使用include标签进行接收,就不需要写多一次

Include标签

当使用重复且被sql标签记录的,就可以使用include去接收,常用于字段起别名那一块

上述讲的都是关于xml中如何使用动态sql

如何在注解中使用动态sql

加script标签(脚本)

太麻烦了,就是加一个script标签,然后进行疯狂的拼接(还是xml好用一些)

相关推荐
怣503 小时前
MySQL多表连接:全外连接、交叉连接与结果集合并详解
数据库·sql
Dragon Wu3 小时前
Spring Security Oauth2.1 授权码模式实现前后端分离的方案
java·spring boot·后端·spring cloud·springboot·springcloud
跳动的梦想家h3 小时前
环境配置 + AI 提效双管齐下
java·vue.js·spring
wjhx4 小时前
QT中对蓝牙权限的申请,整理一下
java·数据库·qt
冰暮流星4 小时前
javascript之二重循环练习
开发语言·javascript·数据库
万岳科技系统开发4 小时前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
独断万古他化4 小时前
【Spring 原理】Bean 的作用域与生命周期
java·后端·spring
冉冰学姐4 小时前
SSM智慧社区管理系统jby69(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·管理系统·智慧社区·ssm 框架
杨超越luckly5 小时前
HTML应用指南:利用GET请求获取中国500强企业名单,揭秘企业增长、分化与转型的新常态
前端·数据库·html·可视化·中国500强
Elastic 中国社区官方博客5 小时前
Elasticsearch:Workflows 介绍 - 9.3
大数据·数据库·人工智能·elasticsearch·ai·全文检索