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

相关推荐
TG_yunshuguoji4 分钟前
阿里云云代理商:阿里云CDN刷新机制是什么?
服务器·阿里云·云计算
Jtti22 分钟前
香港硬防服务器防御DDOS攻击的优点
运维·服务器·ddos
橙汁味的风1 小时前
3关系型数据库的SQL语言
数据库·sql
lpfasd1233 小时前
第2部分:Netty核心架构与原理解析
运维·服务器·架构
若尘拂风3 小时前
centos 7.9 编译安装 freeswitch 1.10.12
服务器·udp·freeswitch·sip
蹦跶的小羊羔3 小时前
sql数据库语法
数据库·sql
小蜜蜂爱编程3 小时前
gerrit的部署与配置关联到不同服务器上的git仓库
运维·服务器·git·gerrit
PawSQL3 小时前
企业级SQL审核工具PawSQL介绍(1) - 六大核心能力
数据库·sql·oracle
唐古乌梁海3 小时前
【python】在Django中,执行原生SQL查询
python·sql·django