mybatis-plus 多表条件分页查询

今天写mybatis-plus 多表条件分页查询的时候碰到很多问题,这里记录下

  1. 建立一个dto来对应查询条件,我这个dto是继承了自己写的分页用的model,主要是为了分页的时候不用再写pagesize和page
@Getter
@Setter
@ApiModel(value = "ReHelpInfo分页请求", description = "求救单信息--分页请求参数")
public class ReHelpInfoQuery extends PagedModel{
          
   

  

    @ApiModelProperty("应急事件名称")
    private String disasterName;
}
  1. 还是像往常一样去建立page和querywapper,这里要注意下,一定要引入分页的插件,不引入的话会报错
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {
          
   

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
          
   
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 自动分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        // 防止全表更新与删除插件
        interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
        return interceptor;
    }

}
  1. 建立page和querywapper对象,这里要具体说一下。这个 rd指的是你sql中的表名,因为我的多表中基本都有这个字段,不加的话,会出现字段指定不明确的错误。
@Override
    public IPage<ReHelpQueryVo> page(ReHelpInfoQuery query) {
          
   
        //进行条件构造
        // 条件查询
        QueryWrapper<ReHelpQueryVo> queryWrapper = new QueryWrapper<>();
        if(query.getPageNo() == null || query.getPageSize() == null) {
          
   
            log.info("分页对象为空");
            return null;
        }
        // 构建分页对象
        Page queryPage = new Page<>(query.getPageNo(), query.getPageSize());
        if(StringUtils.isNotBlank(query.getDisasterName())){
          
   
            queryWrapper.like("rd.disaster_name",query.getDisasterName());
        }
        queryWrapper.orderByDesc("rh.create_time");
        // 分页查询
        IPage<ReHelpQueryVo> iPage = reHelpInfoMapper.findPage(queryPage , queryWrapper);
        return iPage;
    }
  1. ** mapper:这个是mapper层代码,我没有写到xml中(可以写)。我这里查询的条件是封装到querywapper中的,没有在sql中写,这里 ${ew.customSqlSegment} 必须要,这个是引用参数中的条件,page必须放到第一位,和 basemapper中selectPage是一个道理**
@Select("select rh.*,rd.disaster_name from re_help_info rh inner join re_disaster_info rd on rh.disaster_id=rd.id ${ew.customSqlSegment}")
    IPage<ReHelpQueryVo> findPage(Page<ReHelpQueryVo> page, @Param(Constants.WRAPPER) QueryWrapper<ReHelpQueryVo> queryWrapper);
经验分享 程序员 微信小程序 职场和发展