分页
为什么要分页 ?
减少数据的处理
使用limit 实现分页 这就是先查出分页数据。
select *
from mybatis.user
limit 3;
使用mybatis实现分页,核心sql
1、接口
// 分页
List<User> getUserByLimit(Map<String, Integer> map);
2、Mapper.xml
<!-- 分页查询-->
<select id="getUserByLimit" parameterType="map" resultType="User">
select *
from mybatis.user
limit #{startIndex},#{pageSize}
</select>
3、测试
//测试使用limit实现分页
@Test
public void getUserByLimit() {
SqlSession sqlSession = mybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
HashMap<String, Integer> map = new HashMap<>();
map.put("startIndex", 0);//起始索引
map.put("pageSize", 2);//页面大小
List<User> userByLimit = mapper.getUserByLimit(map);
for (User user : userByLimit) {
System.out.println(user);
}
sqlSession.close();
}
4、测试结果
![image-20210621013921272](https://i-blog.csdnimg.cn/blog_migrate/7f8311a3717f9d0ce55d90c1a7c99207.png)
RowBounds分页
这就是先查出来所有的数据在进行分页
1、接口
// 分页2
List<User> getUserByRowBounds();
2、mapper.xml
<!-- 分页查询2-->
<select id="getUserByRowBounds" resultType="User">
select *
from mybatis.user
</select>
3、测试
//按照行边界 分页
@Test
public void getUserByRowBounds() {
SqlSession sqlSession = mybatisUtils.getSqlSession();
//RowBounds实现分页
RowBounds rowBounds = new RowBounds(1, 2);
//通过java代码实现分页
List<Object> selectList = sqlSession.selectList("com.q.dao.UserMapper.getUserByRowBounds", null, rowBounds);
for (Object o : selectList) {
System.out.println(o);
}
sqlSession.close();
}
分页插件
(前端分页是查询了全部的数据,然后再进行分页)
https://blog.csdn.net/qq_37939251/article/details/82916019
第一步:导入分页插件
<!-- pagehelper分页插件-->
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.11</version>
</dependency>
第二步:就是配置分页插件,使得分页插件部署到数据库里面,然后可以进行使用 在sqlsession工厂里面配置的
<!-- 3.4配置分页插件,使mybatis的分页插件可以使用-->
<property name="plugins">
<array>
<!-- 作用就是,当执行查询持久化操作的时候,修改sql语句 -->
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties" value="helperDialect=mysql"/>
</bean>
</array>
</property>
第三步:在业务层添加分页的接口 【传递两个参数,当前页码和每一页的页数】
List<Books> queryAllBookByPage(int page, int pageSize);
第四步:编写业务逻辑类
@Override
public List<Books> queryAllBookByPage(int page, int pageSize) {
//开启分页支持
PageHelper.startPage(page, pageSize);
//调用dao层查询所有
List<Books> books = bookMapper.queryAllBook();
//获取分页的相关信息
PageInfo<Books> info = new PageInfo<>(books);
System.out.println("获取当前页:"+info.getPageNum());
System.out.println("获取每一页的页数"+info.getPageSize());
System.out.println("获取当总页数:"+info.getPages());
System.out.println("获取总记录数"+info.getTotal());
System.out.println("获取第一页"+info.getNavigateFirstPage());
System.out.println("获取最后一页"+info.getNavigateLastPage());
System.out.println("获取上一页"+info.getPrePage());
System.out.println("获取下一页"+info.getNextPage());
System.out.println("获取当前页数据"+info.getList().size());
return books;
}
第五步:进行测试
public class test {
@Test
public void queryAllBookByPage() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
BookServiceImpl bookServiceImpl = applicationContext.getBean("bookServiceImpl", BookServiceImpl.class);
bookServiceImpl.queryAllBookByPage(1, 4);
}
}
前端获取分页数据的方式:
<div align="center">
<font size="2">第 ${page.pageNum} 页,共${page.pages}页,${page.total} 条记录</font> <a href="list.do?page=1">首页</a>
<c:choose>
<c:when test="${page.pageNum - 1 > 0}">
<a href="list.do?page=${page.pageNum - 1}">上一页</a>
</c:when>
<c:when test="${page.pageNum - 1 <= 0}">
<a href="list.do?page=1">上一页</a>
</c:when>
</c:choose>
<c:choose>
<c:when test="${page.pages==0}">
<a href="list.do?page=${page.pageNum}">下一页</a>
</c:when>
<c:when test="${page.pageNum + 1 < page.pages}">
<a href="list.do?page=${page.pageNum + 1}">下一页</a>
</c:when>
<c:when test="${page.pageNum + 1 >= page.pages}">
<a href="list.do?page=${page.pages}">下一页</a>
</c:when>
</c:choose>
<c:choose>
<c:when test="${page.pages==0}">
<a href="list.do?page=${page.pageNum}">尾页</a>
</c:when>
<c:otherwise>
<a href="list.do?page=${page.pages}">尾页</a>
</c:otherwise>
</c:choose>
</div>