在使用Mybatis查询数据库展示到前端的过程中不可避免的要考虑到分页问题,这时就引入了Mybatis的PageHelper插件,这个插件对分页功能进行了强有力的封装,只需要将查询出来的数据List集合放入到它指定的对象中,就完成了分页,下面简单的对分页过程介绍一下。

分页代码

public PageInfo<Po> pageList(Integer pageNum, Integer pageSize){
// 开启分页
PageHelper.startPage(pageNum, pageSize);
List<Po> poList = poMapper.selectXxx();
// 封装list到PageInfo对象中自动分页
PageInfo<Po> poPageInfo = new PageInfo<>(poList);
return poPageInfo;
}
  • Po是数据库对应的实体类对象;
  • PageInfo是需要返回的对象类型,里面封装了包含Po数据的List集合;
  • pageNum:指定了查询第几页数据;
  • pageSize:指定每一页显示多少条数据;

但一般使用PageHelper,要完成以下步骤:

1. 导入依赖包

这里使用的是maven管理。

<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>3.7.5</version>
</dependency>

2. 配置插件

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 配置插件 -->
<property name="plugins">
<array>
<!-- 分页插件 -->
<bean class="com.github.pagehelper.PageHelper">
<property name="properties">
<props>
<!-- 配置数据库方言 -->
<prop key="dialect">mysql</prop> <!-- 配置自动修正页码 -->
<!-- pageNo的有效范围:1~总页数 -->
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>

PageInfo<>对象泛型的转化

既然这样就完成了分页,那么今天讨论的问题到底是干嘛的呢?

是这样的,正常情况下PageInfo中的泛型必须是数据库的实体类对象,即PO对象。正常开发中不可避免的要使用到其他的包括DTO,VO等对象,在对VO等对象分页时,如果直接返回VO泛型的PageInfo对象,该对象中则没有数据,所以要进一步对PageInfo对象进行封装,转换其泛型。

即要对非数据库对应的实体类集合分页时,直接传入list是不生效的,必须对PageInfo进行进一步的处理。

泛型转换

这里定义了一个静态的工具方法,用于将PageInfo中的泛型Po对象转换为Vo对象,其他对象类似,只需要传入对应的泛型。

public class PageUtils{
/**
* 将PageInfo对象泛型中的Po对象转化为Vo对象
* @param pageInfoPo PageInfo<Po>对象</>
* @param <P> Po类型
* @param <V> Vo类型
* @return
*/
public static <P, V> PageInfo<V> PageInfo2PageInfoVo(PageInfo<P> pageInfoPo) {
// 创建Page对象,实际上是一个ArrayList类型的集合
Page<V> page = new Page<>(pageInfoPo.getPageNum(), pageInfoPo.getPageSize());
page.setTotal(pageInfoPo.getTotal());
return new PageInfo<>(page);
}
}
  • 泛型P:Po对象类型;
  • 泛型V:Vo或其他需要分页的数据类型;
  • Page对象是保存list数据集合,实际上是ArrayList类型;

转换泛型的实质就是给新的PageInfo<Vo>对象中的page对象添加pageNum、pageSize、Total等属性。

在得到PageInfo对象后可以使用getList()方法获取存储数据的List集合,进而给PageInfo对象保存需要分页的数据。

举例

PageHelper使用以及PageInfo中分页对象的转化的更多相关文章

  1. js中 json对象的转化 JSON.parse()

    JSON.parse() 方法用来解析JSON字符串,json.parse()将字符串转成json对象.构造由字符串描述的JavaScript值或对象.提供可选的reviver函数用以在返回之前对所得 ...

  2. Mybatis中分页存在的坑1

    站在巨人的肩膀上 https://www.cnblogs.com/esileme/p/7565184.html 环境:Spring 4.2.1 Mybatis 3.2.8 pagehelper 5.1 ...

  3. 【easyui】--普通js中获取easyui中分页信息(page,pageSize等)

    对于datagrid,获取其分页信息: 方法: var pageopt = $('#list_data').datagrid('getPager').data("pagination&quo ...

  4. SpringBoot+Mybatis+ Druid+PageHelper 实现多数据源并分页

    前言 本篇文章主要讲述的是SpringBoot整合Mybatis.Druid和PageHelper 并实现多数据源和分页.其中SpringBoot整合Mybatis这块,在之前的的一篇文章中已经讲述了 ...

  5. [转]ThinkPHP中实例化对象M()和D()的区别,select和find的区别

    1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会 ...

  6. js中判断对象具体类型

    大家可能知道js中判断对象类型可以用typeof来判断.看下面的情况 <script> alert(typeof 1);//number alert(typeof "2" ...

  7. 浅解析js中的对象

    浅解析js中的对象 原文网址:http://www.cnblogs.com/foodoir/p/5971686.html,转载请注明出处. 前面的话: 说到对象,我首先想到的是每到过年过节见长辈的时候 ...

  8. js中XMLHttpRequest对象实现GET、POST异步传输

    js中XMLHttpRequest对象实现GET.POST异步传输 /* * 统一XHR接口 */ function createXHR() { // IE7+,Firefox, Opera, Chr ...

  9. 浅谈Java中的对象和引用

    浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...

随机推荐

  1. JavaScript-----10.作用域

    1.作用域 一段程序代码中所用到的名字不是总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域.目的是为了提高程序的可靠性,更重要的是减少命名冲突. 在es6之前,js的作用域有:全 ...

  2. windows和linux下查看java安装路径

    windows下查看版本:(默认安装路径安装就不需要去配环境变量了) java -version windows下查看安装路径: java -verbose Linux下安装版本查看方式和window ...

  3. Centos7 下 PHP 添加缺少的组件 sockets 和 openssl

    环境是 centos7 + nginx 1.14 + php 7.2.18,由于新增邮件发送功能,使用的是 socket 通讯的方式,需要开启 php 的 sockes 和 openssl 扩展 安装 ...

  4. Sqlite-net 修改版 支持中文和CodeFirst技术

    最近, 做的一个windows 桌面WPF程序, 需要数据库支持.尝试了 sql server 的开发版,使用EF , 效率太低.后来采用sqlite数据库,中间踩坑无数.但最终完美的解决了这些问题. ...

  5. git worktree 使用笔记

    一 worktree 的基本概念和操作 再也不用克隆多个仓库啦!git worktree 一个 git 仓库可以连接多个工作目录 - walterlv的专栏 - CSDN博客 再也不用克隆多个仓库啦! ...

  6. (转)RocketMQ工作原理

    原文:https://blog.csdn.net/lyly4413/article/details/80838716 1.消息中间件的发展: 第一代以ActiveMQ为代表,遵循JMS(java消息服 ...

  7. Geohash精度和原理

    转自:https://blog.csdn.net/u011497262/article/details/81210634 https://www.jianshu.com/p/1ecf03293b9a ...

  8. Winform巧用窗体设计完成弹窗数值绑定-以重命名弹窗为例

    场景 在WIinform中有一种场景就是对文件进行重命名时需要获取原来的名字并填充窗体中的输入框, 然后在点击保存时还要能获取弹窗中输入框的内容. 比如点击重命名时弹窗 点击确认时获取输入框内容. 注 ...

  9. html+css面试题(一)

    XHTML与HTML的有何异同? HTML是一种基于WEB的网络设计语言,XHTML是基于XML的置标语言,XHTML可以认为是XML版的HTML,所以它的语法比较严谨:元素必须关闭,嵌套必须正确,大 ...

  10. Dynamics CRM - js中用webapi基于fetchxml查询遇到的问题 -- Invalid URI: The Uri scheme is too long.

    最近用WebApi做基于Fetchxml的查询的时候,遇到一个很蛋疼的报错:Invalid URI: The Uri scheme is too long. 检查了整个URL,也没发现有什么问题. - ...