一、在MyBatis-Plus的配置类中添加分页拦截器
@EnableTransactionManagement
@Configuration
@MapperScan("mapper包的路径")
public class MybatisPlusConfig {
/**
*
* @return
*/
@Bean
public MybatisPlusInterceptor addPaginationInnerInterceptor(){
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//向Mybatis过滤器链中添加分页拦截器
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
二 、在Mapper中自定义分页查询方法
public interface SysUserMapper extends BaseMapper<SysUser> {
}
这个mapper接口需要继承MP中的BaseMapper<T>
IPage<SysRole> selectPage(Page<SysRole> page, @Param("vo") SysRoleQueryVo roleQueryVo);
可以仿照BaseMapper中的分页查询方法写,这里SysRoleQuueryVo对象是一个值对象。
三、写对应的...mapper.xml映射文件,编写SQL
这种自定义SQL方式的好处就是灵活方便
四、在service层中调用mapper中的自定义分页查询方法
这是接口需要继承 IService
public interface SysRoleService extends IService<SysRole>
service的实现类需要继承 ServiceImpl 并实现上述自己的接口
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper,SysUser> implements SysUserService {}
然后调用mapper里自定的分页查询方法
五、在controller层中写处理方法
@GetMapping,需要的参数有 当前页,页大小 ,【条件】
new 一个 page 设置参数
调用service里的方法 返回一个IPage
@ApiOperation("根据条件分页查询")
@GetMapping("/{current}/{size}")
public Result selectPage(@PathVariable Long current,
@PathVariable Long size,
SysUserQueryVo sysUserQueryVo){
Page<SysUser> page = new Page<>();
page.setSize(size);
page.setCurrent(current);
IPage<SysUser> sysUserIPage = sysUserService.selectPage(page, sysUserQueryVo);
return Result.ok(sysUserIPage);
}
六、Result类
import lombok.Data;
@Data
public class Result<T> {
//返回码
private Integer code;
//返回消息
private String message;
//返回数据
private T data;
public Result(){}
// 返回数据
protected static <T> Result<T> build(T data) {
Result<T> result = new Result<T>();
if (data != null)
result.setData(data);
return result;
}
public static <T> Result<T> build(T body, Integer code, String message) {
Result<T> result = build(body);
result.setCode(code);
result.setMessage(message);
return result;
}
public static <T> Result<T> build(T body, ResultCodeEnum resultCodeEnum) {
Result<T> result = build(body);
result.setCode(resultCodeEnum.getCode());
result.setMessage(resultCodeEnum.getMessage());
return result;
}
public static<T> Result<T> ok(){
return Result.ok(null);
}
/**
* 操作成功
* @param data baseCategory1List
* @param <T>
* @return
*/
public static<T> Result<T> ok(T data){
Result<T> result = build(data);
return build(data, ResultCodeEnum.SUCCESS);
}
public static<T> Result<T> fail(){
return Result.fail(null);
}
/**
* 操作失败
* @param data
* @param <T>
* @return
*/
public static<T> Result<T> fail(T data){
Result<T> result = build(data);
return build(data, ResultCodeEnum.FAIL);
}
public Result<T> message(String msg){
this.setMessage(msg);
return this;
}
public Result<T> code(Integer code){
this.setCode(code);
return this;
}
}