PageHelper查询数据,并将结果集发送到前端

初用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. 详细使用的朋友建议自己看源码

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值