分页的实现
sql的分页语句为(第一个参数为当前页面的索引起始位置,第二个参数为页面的展示个数)
select * from user limit #{startIndex},#{pageSize}; # startIndex : 起始位置 ,默认是0开始 # pageSize :页面大小 # 如何计算出当前页面索引起始位置 # currentPage = (currentPage-1)* pageSize
limit实现分页
1、编写dao接口
//查询全部用户实现分页 List<User> selectUserByLimit(Map<String,Integer> map);
2、编写对应mapper映射文件的方法(参数我们可以使用map封装,方便参数传递)
<select id="selectUserByLimit" parameterType="Map" resultType="User"> select * from mybatis.user limit #{startIndex},#{pageSize} </select>
3、创建了获取sqlSession对象的工具类,并使之可以进行自动提交事务
package com.MLXH.utils; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactor<strong style="color:transparent">本文来源gao@daima#com搞(%代@#码网@</strong>y; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; //mybatis的工具类,重复的代码的提纯 public class MyBatisUtils { //类变量不需要设置默认值; private static SqlSessionFactory sqlSessionFactory; static { //在maven中,所有的资源文件一般都放在resources目录下,我们可以直接拿到。 try { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //设置SqlSessionFactory公共的方法 public static SqlSessionFactory getSqlSessionFactory(){ return sqlSessionFactory; } //获得一个带事务自动提交功能的SqlSession公共的方法 public static SqlSession getSqlSession(){ //自动提交事务 return sqlSessionFactory.openSession(true); } }
RowBounds实现分页
1、写接口
//查询全部用户实现分页使用RowBounds List<User> selectUserByRowBounds();
2、写Mapper映射文件
<select id="selectUserByRowBounds" resultType="User"> select * from mybatis.user </select>
3、工具类同上(只是为了获取sqlSession对象简单而已)
4、编写测试代码
@Test public void selectUserByRowBounds(){ //创建sqlSession SqlSessionFactory sqlSessionFactory = MyBatisUtils.getSqlSessionFactory(); SqlSession sqlSession = sqlSessionFactory.openSession(); int currentPage = 2; //当前页 int pageSize = 2; //页面大小 RowBounds rowBounds = new RowBounds((currentPage - 1) * pageSize, pageSize); //注意点;使用RowBounds就不能使用getMapper了 //selectList: 接收一个List //selectMap: 接收一个Map //selectOne : 接收只有一个对象的时候 List<User> users = sqlSession.selectList("com.MLXH.dao.UserDao.selectUserByRowBounds", null, rowBounds); for (User user : users) { System.out.println(user); } }
两者的区别
- rowBounds 本质就是封装了limit
- limit 是在SQL层面实现分页,在测试中使用getMapper获得对象
- rowBounds 在代码层面实现分页,创建rowBounds对象