
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
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。