MybatisPlus利用构造器写动态SQL
项目场景:
SpringBoot+MybatisPlus+redis+jeecg:
问题描述:
今天有一个需求,前端有一个筛选器,可以根据一个数据表中6个字段筛选出这个数据表中的相应数据,这6个字段可传可不传
问题分析:
设计接口时,我把这6个字段封装到一个实体类中,让前端按照规则传入实体类的值。但由于这个实体类中的值不传的话为空,所以需要写一个动态SQL判断这个封装类中的所有值是否为空并拼接进sql语句中。
解决方案:
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语句中。其它条件根据实际场景可以灵活运用。