动态SQL

动态SQL主要解决查询参数变化导致的SQL拼接问题,MyBatis通过if、choose(when,otherwise)、trim(where,set)和foreach标签提供支持。if标签用于单条件判断,choose用于多条件分支,set用于更新语句中按需修改列,foreach则用于批量操作。这些功能避免了手动拼接SQL的复杂性和错误风险。
摘要由CSDN通过智能技术生成

动态SQL就是根据不同的条件生成不同的sql语句。所谓的动态sql,本质还是sql语句,只是我们在sql层面,去执行一个逻辑代码。动态sql就是拼接sql语句,我们只有保证sql正确性,按照sql的格式,去排列组合就可以了。

sql的内容是变化的, 可以根据条件获取到不同的sql语句.
主要是where部分发生变化。
动态sql的实现, 使用的是mybatis提供的标签

1 为什么需要动态SQL?
看一段Oracle存储过程代码:

由于前台传入的查询参数不同,所以写了很多的if else,还需要非常注意SQL语句里面的and、空格、逗号和转移的单引号这些,拼接和调试SQL就是一件非常耗时的工作。
MyBaits的动态SQL就帮助我们解决了这个问题,它是基于OGNL表达式的。

 

2 动态标签有哪些?

按照官网的分类,MyBatis 的动态标签主要有四类:

  • if
  • choose (when, otherwise)
  • trim (where, set)
  • foreach

 if标签-单条件判断

作用:筛选条件语句
dao层方法为:

public User findConditon(@Param("name")String name, @Param("email")String email);

 choose标签 多条件分支判断

 where语句
如果不使用where语句 就要在where其他判断语句前加入1=1 如 select * from tbl_user02 where 1=1加其他的if判断语句 如果我们不加入这个1=1就可以直接使用where语句 上面的choose和if都搭配使用 使用where 语句 可以自动消除第一个条件中的and 且加上where 例子如上面两个标签中即可

set标签

这个标签配合if标签一起用 一般用于修改语句 如果传递的参数为null 那么就不会修改该列的值

foreach标签

循环标签 适用于批量添加、删除 和查询记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值