# mybatis-pageable **Repository Path**: beyond1206/mybatis-pageable ## Basic Information - **Project Name**: mybatis-pageable - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2016-07-11 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Mybatis Pageable ## 背景 实现分页基于以下想法,就是直接将分页请求对象(包括请求页面,页面大小等)作为参数传入,返回为需要的分页对象(包含总页数、总记录数、当前页码、当前页记录等)。没有对Mybatis的原理去做过多的了解,知道拦截器可以实现此功能,再加上网上借鉴了一些代码,先实现了想法。 ## 使用方法和思路 拦截器会对Mapper方法中的参数进行分析,如果发现Pageable类型的参数,则认为是分页请求,将请求封装为数据库分页sql,查询出总记录数和当前页记录,封装为Page对象返回。Page对象代表了当前页的信息。 ### 拦截器配置 在 mybatis-config.xml 中 ```xml ``` ### Mapper接口方法写法 ```java public interface UserMapper { public List findAll(); public Page findPage(Pageable pageRequest); public Page findPageByFirstName(@Param("firstName") String firstName, Pageable pageRequest); } ``` ### Mapper.xml 写法(和普通查询一样) ```xml ``` ### 使用方法 ```java String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); SqlSession session = sqlSessionFactory.openSession(); try { UserMapper mapper = session.getMapper(UserMapper.class); List users = mapper.findAll(); logger.info("all users: {}", users); // 分页查询 Pageable pageRequest = new Pageable(0, 15); Page userPage = mapper.findPage(pageRequest); logger.info("page 0: {}", userPage); // 分页查询 userPage = mapper.findPageByFirstName("san", pageRequest); logger.info("page 0: {}", userPage); } finally { session.close(); } ``` ### 具体使用方法,参看测试案例,位于 src/test/java中 - 单独使用mybatis时,参考:org.buzheng.mybatis.pageable.MybatisPageableInterceptorMain - spring继承mybatis时,参看测试用例:org.buzheng.mybatis.pageable.UserMaperTest ## 问题 分页暂时只支持Mapper方法中的sql在 xml 中配置。 如果sql通过注解@Select来配置,则会报错:Caused by: java.lang.NoSuchMethodException: org.buzheng.mybatis.pageable.Page.<init>() ******************************************************** 方言类和部分逻辑来源于 https://github.com/miemiedev/mybatis-paginator ,特此感谢。