mybatis plus 使用in的问题

mybatis plus 使用in的问题,第1张

mybatis plus 是对mybatis 的功能的进一步提升,方便开发者的使用,在使用时,对于一些基础的sql语句,mybatis plus可以发挥很好的作用,比如提供了QueryWrapper 对象,可以用来做一些基础查询,但在使用过程中也发现了一个与实际业务有不一样的地方,特此记录一下,

QueryWrapper 在多条件查询(包括 等于eq,模糊查询like ,in 包含查询)时, 假如需要同时满足多个条件,举个例子吧

有张user表 , 包含id name 等字段

假如需要id 包含 数组arr 且name like * ,这时候,需要对arr做判空处理, 因为在arr为空的情况下,mybatis plus 会直接去掉in 这个条件的判断,会导致只要user表中的数据 满足 name like * 条件 ,就会被查出来,这是有问题的,我们需要的是 id 包含 arr和name like * 同时满足条件时才会被查出来,这可能是mybatis plus 内部的一个特殊逻辑处理,希望大家在使用时,碰到类似的情况多做下判断。

UserMapper:

如果queryWrapper调用了 .isNotNull("name")、 .isNotNull("email")、 .ge("age",12)

那么运行的sql就是这样的:(注意where字句)

如果queryWrapper只是调用了.isNotNull("name")

那么运行结果就是这样的:(注意where子句)

找到规律了没?

其实很简单,QueryWraper就是增加where字句的。queryWrapper调用了一下 .isNotNull("name"),那么sql语句的where条件里面就加一句and name IS NOT NUL,queryWrapper再调用一下.ge("age",12),那么sql语句得where条件里面就再加一句and age >12。

mybatisplus自定义sql

参考: https://www.cnblogs.com/baiyifengyun/p/13756653.html

mybatisplus自定义sql+QueryWrapper

这里举一个多表联查的例子

实体类:


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11685608.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存