MybatisPlus利用构造器写动态SQL
项目场景:
SpringBoot+MybatisPlus+redis+jeecg:
问题描述:
今天有一个需求,前端有一个筛选器,可以根据一个数据表中6个字段筛选出这个数据表中的相应数据,这6个字段可传可不传
问题分析:
设计接口时,我把这6个字段封装到一个实体类中,让前端按照规则传入实体类的值。但由于这个实体类中的值不传的话为空,所以需要写一个动态SQL判断这个封装类中的所有值是否为空并拼接进sql语句中。
解决方案:
因为对MybatisPlus的构造器不太熟,所以直接在网上查了这个问题“MybatisPlus构造器怎么构造动态sql”,然后结局有点悲惨,一个小时多都没有解决。纳闷传说中很强大的MybatisPlus构造器为什么会有此bug???
后来听朋友建议去看了一下MybatisPlus的构造器的源码才发现,QueryWrapper中其实是有动态拼接的(百度搜索瞎了吗,还是我瞎了,一个小时愣是没有搜出来),下面赶紧展示:
QueryWrapper<ProjectModel> queryWrapper = new QueryWrapper<>();
queryWrapper = queryWrapper.eq(vclNumber!=null&&vclNumber!="","vclNumber",vclNumber)
.eq(vclModelName!=null&&vclModelName!="","vclModelName",vclModelName)
.eq(customerName!=null&&customerName!="","customerName",customerName)
.eq(linkman!=null&&linkman!="","linkman",linkman)
.eq(engineModel!=null&&engineModel!="","engineModel",engineModel)
.eq(repairTypeValue!=null&&repairTypeValue!="","repairTypeValue",repairTypeValue)
.orderByDesc("create_time");
eq(R column, Object val)/eq(boolean condition, R column, Object val)
此处的“eq”相当于“=”,并对字段进行了非空判断然后动态拼接进sql语句中。
每天都会根据项目中遇到的问题或bug更新上来,有什么疑问或其他解决方法欢迎提出来一起讨论!!!