MyBatis强大的动态Sql功能

1.动态不定增加

根据需求 , 动态的拼接SQL 。 用户有的信息是必须输入,但有的不是必须进行输入

比如在填写注册信息的时候,有时候密码是一定要填写的,而银行卡号不是必须填写的

1)注解方式

测试类中 :

使用 if 标签 可以实现动态 SQL

2)XML方式

XML文件中:

测试类中:

2.查询

此处使用 XML 方式实现动态查询

需求一般是需要根据特定的字段显示特定的内容

比如网上商城手机,选择256G内存 + 16G运行内存 显示的就是16+256配置的手机。如果什么也不选,那么就显示出来所有的手机列表。

这样写也可以 , 但是会出现问题 , 比如如果只使用 age 作为查询字段,那么 SQL 语句会变成 :

可以看出来前面多了个 and

可以使用 trim 进行去除

但是使用 where 更好

如果查询条件都为空 , where 标签会自动去除where关键字

3.修改

mysql 中修改的格式为 :

sql 复制代码
update userinfo set a = ?,b= ?where c = ?

如果直接这样写,SQL 语句是这样的:

那么如何去除逗号, 可以使用 trim 标签

当然,推荐使用 set 标签

4.删除(批量)

注意 : for each 中 collection 参数的情况如下:

使用 id 进行批量删除

separator 是元素之间的分割

foreach 标签就是对应 in( ) 里面的内容

这里需要注意的就是

如果只有单个参数并且是 List , 那么collection 的 id 属性必须是list , 如果是其他 需要进行重命名

重命名的情况:

单元测试类中:

xml文件中:

不重命名 , 那么 collection 所对应的值 需要改为 list 因为单元测试类中使用的是 List

如果使用的是 String 之类的,就需要使用 array

相关推荐
Liuqy-059 分钟前
IO模型与并发服务器
服务器·网络·select·多线程·epoll·并发服务器·io多路复用
w-w0w-w9 小时前
SQL注入
网络·数据库·sql
知已难寻11 小时前
03 · OpenStack的计算管理 Nova
运维·服务器·开发语言·云原生·云计算·openstack·开源软件
宇宙无敌暴龙战士66612 小时前
MySQL 8 库表操作学习笔记:SQL 基础、库表管理、约束与用户授权全流程
数据库·sql·mysql·学习笔记·后端开发
huainingning12 小时前
Windows syslog日志服务器搭建与模拟器对接
运维·服务器·智能路由器
say_fall12 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
wacsii13 小时前
【Linux进程(一)】Linux 进程初探:操作系统如何管理进程?fork() 为什么返回两次?
linux·运维·服务器
共享家952713 小时前
408 操作系统第一章
服务器·数据库·windows
wljt13 小时前
公司二-面试题
java·开发语言·mybatis
云飞云共享云桌面14 小时前
1台SolidWorks服务器如何承载10个设计并发?
运维·服务器·网络·3d·制造