文章目录
一. 常用解决方案
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吧.....