当前版本: 3.3.1
问题是这样的, 前端传过来的查询条件中 有的属性是null 有的属性是空字符串 即: ""
这个时候我用
QueryWrapper
queryWrapper.setEntity(user); //因为这样设置最省事.
比如说User类有两个属性分别是A和B, 值分别为null和""
那么此时生成的查询条件就会是 B = ''
理论上应该一个查询条件也没有才对
我翻阅了一下前人提的帖子 如 #452 给出的方式是如下:
QueryWrapper.eq(boolean,column,value)
这种方式是对单个字段来设置的, 如果我这个类有20个或更多个属性我就需要写更多的代码来处理这个空字符串的问题. 是不是特别的费事.
如果说queryWrapper.setEntity(user);方法也加一个如QueryWrapper.eq(boolean,column,value)这个方法的第一个参数就好了.
不知道我表达的清楚否? 请大神帮忙看看这个问题吧..
无
无
可通过配置确定生成SQL的条件,如下配置可以解决字段为空或NULL时不生成查询条件
mybatis-plus.global-config.db-config.select-strategy=not_empty
参考官方配置:https://mp.baomidou.com/config/#insertstrategy
个人开发建议:
全局设置 mybatis-plus.global-config.db-config.select-strategy=not_empty
1、查询时
根据wrapper.setEntity(user); //因为这样设置最省事,有了上面的全局配置,自动过滤字段为空为NULL的查询条件
QueryWrapper<User> wrapper = new QueryWrapper<>();
User user = new User();
user.setEmail(null);
user.setName("");
user.setVersion(1);
wrapper.setEntity(user);
List<User> userList = userMapper.selectList(wrapper);
userList.forEach(item -> System.out.println(item));
2、更新时
根据业务逻辑指定字段更新,或者XML配置动态SQL
wrapper.setEntity(user);
只能设置等值查询条件,对于like模糊查询等不适用
在 select 的时候的字段验证策略: wrapper 根据内部 entity 生成的 where 条件 目前没有默认值,等 {@link #fieldStrategy} 完全去除掉,会给个默认值 NOT_NULL 没配则按 {@link #fieldStrategy} 为准
如上
完美解决了, 我的问题. 上面说的like问题, 我会在代码里单独设置, 并且设置完后把对应的属性设置为null, 这样20个字段3个like工作量也就没有那么大了. 完美!!!
Most helpful comment
可通过配置确定生成SQL的条件,如下配置可以解决字段为空或NULL时不生成查询条件
mybatis-plus.global-config.db-config.select-strategy=not_empty