思考:为什么需要分页?
- 减少数据的处理量
- 增加页面的可阅读性
1、limit基础使用
# 语法
select * from table limit startIndex,pageSize;
# 从第5条数据开始,显示10行
select * from table limit 4,10;
# limit 第二个参数为-1时,表示从第一个参数开始,查询后面的所有记录
# 现在已经不能使用了,详情见:https://bugs.mysql.com/bug.php?id=2037
#如果只给定一个参数,它表示返回最大的记录行数目:
select * from table limit 5; //检索前5个记录行
#等价于select * from table limit 0,5;
2、使用limit实现分页
具体步骤:
-
编写Mapper接口
public interface UserMapper { // 分页查询 List<User> getUserByLimit(Map<String, Integer> map); }
-
编写Mapper.xml文件
<select id="getUserByLimit" parameterType="map" resultMap="userMap"> select * from mybatis.user limit #{startIndex},#{pageSize} </select>
-
测试类中传入参数
@Test public void getUserByLimit() { SqlSession sqlSession = MyBatisUtils.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); Map<String, Integer> map = new HashMap<>(); map.put("startIndex",1); map.put("pageSize",2); List<User> userList = userMapper.getUserByLimit(map); for (User user : userList) { System.out.println(user); } sqlSession.close(); }
3、使用RowBounds分页
我们除了使用Limit在SQL层面实现分页,也可以使用RowBounds在Java代码层面实现分页,当然此种方式作为了解即可,此种方式现在已经不推荐使用了
具体步骤:
-
定义Mapper接口
public interface UserMapper { List<User> getUserByRowBounds(); }
-
编写Mapper.xml文件
<select id="getUserByRowBounds" resultMap="userMap"> select * from mybatis.user </select>
-
编写测试类,使用RowBounds
@Test public void getUserByRowBounds() { SqlSession sqlSession = MyBatisUtils.getSqlSession(); int currentPage = 2; //第几页 int pageSize = 2; //每页显示几个 int startIndex = (currentPage - 1) * pageSize; // 从第几行开始查询 RowBounds rowBounds = new RowBounds(startIndex,pageSize); //通过session.**方法进行传递rowBounds,[此种方式现在已经不推荐使用了] List<User> userList = sqlSession.selectList("com.jh.mapper.UserMapper.getUserByRowBounds", null, rowBounds); for (User user : userList) { System.out.println(user); } sqlSession.close(); }
4、使用分页插件分页
使用pageHelper插件进行分页
了解即可,万一以后公司的架构师说要使用,你需要知道它!