初用PageHelper,记录使用,解释pageInfo返回是Page对象而不是结果集
1. pom添加依赖
<!-- Mybatis分页插件PageHelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.0</version>
</dependency>
2. 在 SqlSessionFactory 设置插件,或在 SpirngMVC 配置文件中设置
这里以SqlSessionFactory为例
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 指定Mybatis配置文件 -->
<property name="configLocation" value="classpath:mybatis-config.xml" />
<!-- 指定数据源 -->
<property name="dataSource" ref="pooledDataSource" />
<!-- 指定mapper文件位置 -->
<property name="mapperLocations" value="classpath:mapper/*.xml" />
<!-- 配置PageHelper插件 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<prop key="helperDialect">mysql</prop>
<!-- 页码长度为0时不进行分页 -->
<prop key="pageSizeZero">true</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
3. Controller方法
@RequestMapping("/allBooks")
public ModelAndView getAllBooks() {
ModelAndView mv = new ModelAndView();
PageHelper.startPage(1, 4); // 传入页码,每页条数
List<Book> books = mapper.getAllBooks(); // SQL查询所有书,此时books是Page对象,不是ArrayList对象
PageInfo<Book> pageInfo = new PageInfo<>(books);
List<Book> list = pageInfo.getList(); // 返回结果集,list实际上是一个Page对象
mv.addObject("pageInfo", pageInfo);
mv.addObject("books", new Gson().toJson(list));
mv.setViewName("book/show");
}
(1)在 PageHelper.startPage() 执行后,Mapper进行SQL查询返回的结果集向下转型成了一个 Page 对象,而不是ArrayList对象
(2)Page类 继承了 ArrayList类,重写了 toString() 方法,所以 new PageInfo<>(books) 传入了一个Page对象,pageInfo.getList() 返回的也是 Page对象,所以 pageInfo.getList() 返回值不是我们想要的book集合
- pageInfo.getList()的返回值,一个Page对象:
Page{count=true,
pageNum=1,
pageSize=4,
startRow=0,
endRow=4,
total=8,
pages=2,
reasonable=false,
pageSizeZero=true}
[Book{bookId=1, bookName='死屋', author='unknown', press='unknown', imgPath='/static/img/book/default.jpg', bookImpression='null'},
Book{bookId=2, bookName='我和你', author='马丁·布伯', press='四川人民出版社', imgPath='', bookImpression='null'},
Book{bookId=3, bookName='波兰史', author='', press='', imgPath='', bookImpression=''},
Book{bookId=4, bookName='无敌舰队', author='unknown', press='unknown', imgPath='/static/img/book/default.jpg', bookImpression='null'}
- 而我们只想要book集合的信息
Book{bookId=2, bookName='我和你', author='马丁·布伯', press='四川人民出版社', imgPath='', bookImpression='null'}, Book{bookId=3, bookName='波兰史', author='', press='', imgPath='', bookImpression=''}, Book{bookId=4, bookName='无敌舰队', author='unknown', press='unknown', imgPath='/static/img/book/default.jpg', bookImpression='null'}
(3) 将 pageInfo.getList() 返回的结果转换成 Json,并发送给前端,交由前端进行Json解析,得到对象后,对其进行遍历
Page就是一个ArrayList,可以进行遍历获取结果集
4. 前端JS解析获取结果集
<!DOCTYPE html>
<html lang="zh_CN" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title></title>
<script th:src="@{/static/js/jquery-3.6.0.js}"></script>
</head>
<body>
<!-- 获取后端传过来的Model数据 -->
<input id="books" type="hidden" th:value="${books}">
</body>
<script th:inline="javascript">
$(function () {
var booksJson = $("#books").val();
var books = JSON.parse(booksJson); // 将传过来Json进行解析,得到List集合
$.each(books, function (index, book) { // 遍历对象,并将对象转为字符串
alert(JSON.stringify(book)); // alert展示每本书的信息
});
});
</script>
解析结果:SQL查询后分页的第一页,4条Book对象的信息如下
5. 详细使用的朋友建议自己看源码
…