MyBatis Plus 实现简单分页(拓展性强)

MyBatis Plus 实现简单分页(拓展性强


1、导入 MyBatis Plus 相关依赖

<!-- lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version>
</dependency>

<!-- 需要 mybatis plus 的注解 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-annotation</artifactId>
    <version>3.5.2</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.2</version>
</dependency>

2、配置分页拦截器(核心)

@Configuration
@MapperScan("xx.xx.mapper")
public class MyBatisPlusConfig {
    
    

    //分页拦截器
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
    
    
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
        paginationInnerInterceptor.setOverflow(true); //合理化
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        return interceptor;

    }
}

3、entity 实体类, 根据自己的需求

@Getter
@Setter
@TableName("t-user")
public class User implements Serializable {
    
    

    @TableId(type = IdType.AUTO)
    private Long id;
    private String name; //姓名
    private String nickname; //昵称
    private String sex; //性别
    private String phone; //联系电话
    private String email; //邮箱
}

4、封装查询对象, 根据自己需求进行封装

@Getter
@Setter
public class BaseQuery {
    
    

    private Integer currentPage = 1;
    private Integer pageSize = 10;

    private String keyword;

    public Integer getStart() {
    
    
        return (currentPage - 1) * pageSize;
    }
}

5、Mapper接口使用 MyBatis plus 一定要 继承 BaseMapper并指明泛型, 注意!!! 一定要贴上 @MapperScan(“xx.xx.mapper”) mapper 扫描器

public interface UserMapper extends BaseMapper<User> {
    
    
    
}

6、业务层接口

public interface IUserService extends IService<User> {
    
    
    
    Page<User> queryPage(BaseQuery qo);
}

7、业务层接口实现类, 一定要贴上 @Service 注解, 交给 sping 容器进行管理

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
    
    
 
 	@Override
    public Page<User> queryPage(BaseQuery qo) {
    
    

        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>()
                .like(StringUtils.hasLength(qo.getKeyword()), User::getName, qo.getKeyword());

        return super.page(new Page<>(qo.getCurrentPage(), qo.getPageSize()), wrapper);
    }
}

8、Controller控制层调用业务层 UserServiceImpl 中分页方法

@RestController
@RestMapping("/users")
public class UserController {
    
    
    
    @Autowired
    private IUserService userService;
    
    @GetMapping("/query")
    public AjaxResult<?> query(BaseQuery qo) {
    
    
        Page<User> page = userService.queryPage(qo);
        return AjaxResult.success(page);
    }
}

9、统一结果响应处理对象

/**
 * 统一结果响应对象
 * @param <T> 相应的 data 属性数据类型
 */
public class AjaxResult<T> extends HashMap<String, Object> {
    
    

    public  static final Integer DEFAULT_SUCCESS_CODE = HttpStatus.OK;
    public static final String DEFAULT_SUCCESS_MSG = "success";

    public static final Integer DEFAULT_FAILED_CODE = HttpStatus.SERVER_ERROR;
    public static final String DEFAULT_FAILED_MSG = "error";

    public static final String CODE_NAME = "code";
    public static final String MSG_NAME = "msg";
    public static final String DATA_NAME = "data";

    public AjaxResult(Integer code, String msg, T data) {
    
    
        super.put(CODE_NAME, code);
        super.put(MSG_NAME, msg);
        // 当 data 没有数据的时候,就没有属性
        // 完整数据结构: {code: 200, msg: "xxx", data: {xxx}}
        // 没有 data: {code: 200, msg: "xxx"}
        if (data != null) {
    
    
            super.put(DATA_NAME, data);
        }
    }

    public AjaxResult(Integer code, String msg) {
    
    
        this(code, msg, null);
    }

    public static <T> AjaxResult<T> success(String msg, T data) {
    
    
        return new AjaxResult<>(DEFAULT_SUCCESS_CODE, msg, data);
    }

    public static <T> AjaxResult<T> success(T data) {
    
    
        return success(DEFAULT_SUCCESS_MSG, data);
    }

    public static <T> AjaxResult<T> success(String msg) {
    
    
        return success(msg, null);
    }

    public static <T> AjaxResult<T> success() {
    
    
        return success(DEFAULT_SUCCESS_MSG);
    }

    public static <T> AjaxResult<T> failed(Integer code, String msg, T data) {
    
    
        return new AjaxResult<>(code, msg, data);
    }

    public static <T> AjaxResult<T> failed(Integer code, String msg) {
    
    
        return failed(code, msg, null);
    }

    public static <T> AjaxResult<T> failed(String msg) {
    
    
        return failed(DEFAULT_FAILED_CODE, msg);
    }

    public static <T> AjaxResult<T> failed(Wolf2wException ex) {
    
    
        return failed(ex.getCode(), ex.getMessage());
    }

    public static <T> AjaxResult<T> failed() {
    
    
        return failed(DEFAULT_FAILED_MSG);
    }

    /**
     * 向 map 中链式添加元素
     * @param key   添加元素的 key
     * @param value 添加元素的 value
     * @return      当前的 map 对象, 以便于链式编程
     */
    public AjaxResult<?> put(String key, Object value) {
    
    
        super.put(key, value);
        return this;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_49137820/article/details/128427170