解决mybatis-plus where直接拼接and/or条件连接语句
反例2and条件不符合相当于没有,不看;剩下wrapper.apply(“1=1”).last(“1=1”).连接句直接不.or()默认and连接,背景用户可以输入以下内容.不输入即为全查询.因此。因此即为’where(1=1and)1=1’(重点将该检索字段的sql拼接)反例1直接拼接了连接语句.......
·
文章目录
一. 常用解决方案
1.常规的在xml直接写sql语句
2.但是mybatis-plus为我们提供的动态sql生成,下面以此为例
二. 动态拼接sql
背景: 用户可以输入以下内容. 不输入即为全查询.因此字段均可以为空值
.
其中检索字段可以通过id或商品名称查询
(重点讲该检索字段的sql拼接)
正例(可一劳永逸)
:
// nested 是 正常嵌套但不带 and
// apply可以写sql语句
// nested 配合 apply 即可避免where直接拼接 连接语句
// 例: where ((1=1) and sku_id = skuInfoFindRangeVo.getKey()) or sku_name = skuInfoFindRangeVo.getKey();
QueryWrapper<SkuInfoEntity> wrapper = new QueryWrapper<>();
wrapper.nested(w -> w.apply("1=1").eq(StringUtils.isNotBlank(skuInfoFindRangeVo.getKey()),
"sku_id", skuInfoFindRangeVo.getKey()).or()
.eq(StringUtils.isNotBlank(skuInfoFindRangeVo.getKey()),
"sku_name", skuInfoFindRangeVo.getKey()))
反例1
:
// 例: where and (1=1 and sku_id = skuInfoFindRangeVo.getKey()) or sku_name = skuInfoFindRangeVo.getKey();
QueryWrapper<SkuInfoEntity> wrapper = new QueryWrapper<>();
wrapper.and(w -> w.apply("1=1").eq(StringUtils.isNotBlank(skuInfoFindRangeVo.getKey()),
"sku_id", skuInfoFindRangeVo.getKey()).or()
.eq(StringUtils.isNotBlank(skuInfoFindRangeVo.getKey()),
"sku_name", skuInfoFindRangeVo.getKey()))
反例1:直接拼接了连接语句.
提示应该大部分实际开发中,都要求写mapper吧.....
更多推荐
已为社区贡献2条内容
所有评论(0)