MyBatis分页主要有:原生Limit分页、RowBounds分页、以及PageHelper插件等MyBatis分页方式@mikechen
原生SQL的Limit分页
1.Limit语法
SELECT * FROM table LIMIT stratIndex,pageSize
2.修改Mapper文件
<select id="selectUser" parameterType="map" resultType="user"> select * from user limit #{startIndex},#{pageSize} </select>
3.业务代码
在实际使用limit,是根据前端传进来页码和每页的条数,在sql使用limit进行查询。
//分页查询 , 两个参数startIndex , pageSize @Test public void testSelectUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); int currentPage = 1; //第几页 int pageSize = 2; //每页显示几个 Map<String,Integer> map = new HashMap<String,Integer>(); map.put("startIndex",(currentPage-1)*pageSize); map.put("pageSize",pageSize); List<User> users = mapper.selectUser(map); for (User user: users){ System.out.println(user); } session.close(); }
使用PageHelper插件分页
PageHelper还是很好用的,主要分为如下三大步骤。
第一步:导入分页插件依赖
<!-- pagehelper 分页插件--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.2.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version> </dependency>
第二步:在mybaits-config.xml配置使用分页插件
<plugins> <!-- 配置mybatis分页插件PageHelper --> <!-- com.github.pagehelper为PageHelper类所在包名 --> <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin> </plugins>
第三步:业务层代码
@Test public void selectUserPageHelper() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); //第二种,Mapper接口方式的调用,推荐这种使用方式。 PageHelper.startPage(1, 3); List<User> list = mapper.getUserInfo(); //用PageInfo将包装起来 PageInfo page = new PageInfo(list); for (User map: list){ System.out.println(map); } System.out.println("page:---"+page); session.close(); }
RowBounds分页
RowBounds 本质就是封装了limit,我们只需要在业务层关注分页即可,无须再传入指定数据。
Mybatis内置了一个专门处理分页的类:RowBounds,我们使用它可以轻松完成分页。
RowBounds分页主要包含,如下3个步骤:
1.定义接口方法
//分页查询所有用户,通过自带的RowBounds List<User> selectAllUserByRowBounds(RowBounds rowBounds);
2.SQL映射
<!-- 分页查询所有用户,通过自带的RowBounds --> <select id="selectAllUserByRowBounds" resultMap="userMap"> select * from t_user </select>
3.业务代码
//分页查询所有用户信息,通过自带的RowBounds @Test public void selectAllUserByRowBounds(){ int currPage=2;//当前页码 int pageSize=3;//当前页显示记录数量 //注意:currPage和start别搞错了,一个表示当前页码,一个是从第几行读取记录 int start = (currPage-1)*pageSize;//计算从第几行读取记录 RowBounds rowBounds = new RowBounds(start,pageSize); List<User> userList = mapper.selectAllUserByRowBounds(rowBounds); for (User user : userList) { System.out.println(user); } }
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》