分页
分页的方式有两种,一种是利用SQL的limit语句传统分页,一种是使用RowBounds进行分页。
1. Limit
使用此方法需要多传递两个参数,一个是开始的索引,一个是每页的个数。
1.1. SQL语法
SELECT
*
FROM
USER
LIMIT startIndex,pageSize
1.2. 用例
接口:
/** * limit查询用户 * @param map * @return */ List<User> getUserListByLimit(Map<String, Integer> map);
mapper
<select id="getUserListByLimit" resultType="User" parameterType="map"> select * from user limit #{startIndex},#{pageSize} </select>
测试
@Test public void getUserListByLimit() { SqlSession sqlSession = null; HashMap<String, Integer> map = new HashMap<>(); map.put("startIndex", 0); map.put("pageSize", 2); try { sqlSession = MyBatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> userListByLimit = mapper.getUserListByLimit(map); for (User user : userListByLimit) { System.out.println(user); } } finally { sqlSession.close(); } }
2. RowBounds
使用RowBounds不需要在SQL语句层面进行分页。方法比较老。
2.1. 语法
// 开始索引和每页个数
RowBounds rowBounds = new RowBounds(startIndex, pageSize);
sqlSession = MyBatisUtils.getSqlSession();
// 带包名和类名的方法路径
List<User> users = sqlSession.selectList(path null, rowBounds);
2.2. 用例
接口
/** * RowBounds查询用户 * @return */ List<User> getUserListByRowBounds();
mapper
<select id="getUserListByRowBounds" resultType="User"> select * from user </select>
测试
@Test public void getUserListByRowBounds() { SqlSession sqlSession = null; try { // startIndex pageSize RowBounds rowBounds = new RowBounds(0, 2); sqlSession = MyBatisUtils.getSqlSession(); // 带包名和类名的方法路径 List<User> users = sqlSession.selectList("org.gs.mapper.user.UserMapper.getUserListByRowBounds", null, rowBounds); for (User user : users) { System.out.println(user); } } finally { sqlSession.close(); } }
3. Mybatis PageHelper插件
目前暂时列举其中一个方法。
3.1. 使用方法
只需要在检索语句前面加上PageHelper.startPage(startPage, pageSize);
语句即可,不需要做其余改动。
// 开始页数(从1开始),页面大小
PageHelper.startPage(1, 2);
List<User> users = sqlSession.getMapper(UserMapper.class).getUserListByPageHelper();
3.2. 配置过程
导入Maven坐标
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.2.1</version> </dependency>
配置拦截器插件
<plugins> <!-- com.github.pagehelper为PageHelper类所在包名 --> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <!--具体参数暂不展开--> <!--<property name="param1" value="value1"/>--> </plugin> </plugins>
3.3. 用例
接口
/** * 通过PageHelper查询用户 * @return */ List<User> getUserListByPageHelper();
mapper
<select id="getUserListByPageHelper" resultType="User"> select * from user </select>
测试
@Test public void getUserListByPageHelper() { SqlSession sqlSession = null; try { // startIndex pageSize sqlSession = MyBatisUtils.getSqlSession(); // 开始页数(从1开始),页面大小 PageHelper.startPage(1, 2); List<User> users = sqlSession.getMapper(UserMapper.class).getUserListByPageHelper(); for (User user : users) { System.out.println(user); } } finally { sqlSession.close(); } }