在实现分页时,我们先看看什么是分页,及分页的具体用处。
1、使得内容更加有条理。想一下,如果没有分页,那么所有内容都展现在同一页的时候,
用户就需要一直向下翻, 那么翻到啥时候才是头,哈哈。
2、加载更快,性能更好。一次查20个,比一次查20000个性能肯定更好;另外如果数据量很大,
一次性将内容都查询度出来,查询出来的结果是放在内存里面的,内存没有这么大。
3、有时并不不需要这么多数据,如新闻,一般人可能只看最近前20条;如果我们将后面的也都
查询出来了,就是浪费。
4、给予用户更好的视觉效果。通过分页使得页面内容更加美观,用户体验效果更好。
// currentPage:当前页码 pageSize:页面大小
// Mysql 中的当前页是从 0 开始的,但是我们的页码往往是从 1 开始的,所以需要 - 1
select * from user limit (currentPage - 1) * pageSize,pageSize
虽然这个分页语句没问题,但是在实际运用时 limit 后面必须是常量,也就是说 limit 后面
是不能跟算术运算符的,如果要跟算术运算符,需要用 concat 进行字符串的拼接才可以实现。
为了解决上使用 limit 时所出现的问题,我们可以直接计算好值进行传入,这样分页语句接受到
的参数就是一个常量了。
还是拿之前的程序来测试一下该语句是否可以成功查询到数据:
从上面的语句可以看出,我们需要两个参数: 页面开始位置,页面大小。
两个参数我们需要怎么传递呢?
1、创建一个对象,传一个对象,将两个参数作为该对象的属性进行传值。
2、用 Map 对象进行传值,Map 是以键值对的进行存储信息,而我们取出相信的信息时也是利用
键值对的形式,所以用 Map 相对来说比传一个实体类要好的多。
UserMapper.xml:
在改文件中添加下列内容:
<select id="findAll" resultType="rj.cool.bean.User" parameterType="map">
select * from user limit #{startIndex},#{pageSize}
select>
测试类代码:
@Test
/*
* 分页查询
*
*/
public void selectAllUser() throws IOException {
SqlSession session = MyBatisDButils.getSession();
Map<String,Integer> map = new HashMap<String, Integer>();
int currentPage = 1,pageSize = 3;
map.put("startIndex",(currentPage - 1) * pageSize);
map.put("pageSize",pageSize);
List<User> list = session.selectList("rj.cool.dao.UserMapper.findAll",map);
for(User u:list) {
System.out.println(u.getId() + " " + u.getName() + " " + u.getPwd());
}
session.close();
}
在用 RowBounds 实现分页时先来了解一下为什么用这个来实现?
先看一下我们在用 selectList() 时对应的有几个方法:
看一下第二个方法,我们了解到 在用 selectList() 有这样一个方法:在该方法中就有 RowBounds
类产生的对象。
接着我们看一下 RowBounds 这个 类 里面有哪些东西?
我们看到该类中有两个属性: offset,limit,这两个对象就对应着我们 sql 语句中的 startIndex,
pageSize, 所以我们将这两个值传给 offset, limit 就可以啦, 然后调用包含 Rowbounds 的
selectList() 就可以实现分页啦。
UserMapper.xml:
用 Rowbounds 实现时 sql 语句就不用 limit 了,Mybatis 都帮我们做好啦。
<select id="getAllUser" resultType="rj.cool.bean.User">
select * from user
select>
测试类代码:
@Test
public void getAllUser() throws IOException {
SqlSession session = MyBatisDButils.getSession();
RowBounds rowBounds = new RowBounds(0,2);
List<User> list = session.selectList("rj.cool.dao.UserMapper.findAll",null, rowBounds);
for(User u:list) {
System.out.println(u.getId() + " " + u.getName() + " " + u.getPwd());
}
session.close();
}
到此,分页的具体实现就结束了,可能还有多种实现分页的奇数,然后在下才疏学浅,如有解释的不到位
的地方,欢迎各位大佬能够悉数指出,在下万分感激。
嘻嘻,如果对您有帮助,愿您留下小赞,您的小小的鼓励是我前进的不懈动力。
加油!