Mybatis Plus 自定义sql 多表 带条件 分页 查询

主要需求:

1.查询带分页的列表功能

2.使用自己写的sql实现

3.sql中会涉及到多表关联问题,查询多表字段

4.使用Mybatis Plus的分页功能和条件构造器

 

废话少说,直接代码!

方法1-通过对象拼接条件参数

该方法条件上没有使用Mybatis Plus的条件构造器,而是自己在sql语句中拼接的。

controller

@PostMapping("/page")
public ReturnResult getAllRegisterUser(Page page, UserManagerListDto userManagerListDto) {
    IPage allRegisterUser = userManagerService.getAllRegisterUser(page, userManagerListDto);
    return new ReturnResult<>(allRegisterUser);
}

service

IPage getAllRegisterUser(Page page, UserManagerListDto userManagerListDto);

serviceImpl

@Override
public IPage getAllRegisterUser(Page page, UserManagerListDto userManagerListDto) {
    return userManagerMapper.getAllRegisterUser(page, userManagerListDto);
}

mapper(dao)

IPage getAllRegisterUser(Page page, @Param("userManagerListDto") UserManagerListDto userManagerListDto);

xml

 

方法2-通过MP的Wrapper拼接参数

 该方法使用了Mybatis Plus的条件构造器来拼接所需要的条件参数

controller

@PostMapping("/page/wrapper")
public ReturnResult selectMyPage(Page page, UserManagerListDto userManagerListDto) {
    QueryWrapper queryWrapper = new QueryWrapper<>();
    if (StrUtil.isNotBlank(userManagerListDto.getUserName())) {
        queryWrapper.like("a.user_name", userManagerListDto.getUserName());
    }

    if (StrUtil.isNotBlank(userManagerListDto.getState())) {
        queryWrapper.eq("b.state", userManagerListDto.getState());
    }

    IPage selectMyPage = userManagerService.selectMyPage(page, queryWrapper);

    return new ReturnResult<>(selectMyPage);
}

service

IPage selectMyPage(Page page, Wrapper queryWrapper);

serviceImpl

@Override
public IPage selectMyPage(Page page, Wrapper queryWrapper) {
    return userManagerMapper.selectMyPage(page, queryWrapper);
}

mapper(dao)

IPage selectMyPage(Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper);

xml

注意项:

  • SQL语句后面增加${ew.customSqlSegment}用于条件查询
  • 方法中注意Page的使用,如果使用不当会造成数据查询不到
  • Wrapper条件不能使用兰姆达表达式

 

 

 

 

 

你可能感兴趣的:(Mybatis Plus 自定义sql 多表 带条件 分页 查询)