实战day02(八)----PageHelper的使用方法

论坛 期权论坛 脚本     
匿名技术用户   2020-12-22 18:44   16   0

1.1.1. 商品列表页面


对应的jsp为

item-list.jsp

请求的url:

/item/list

请求的参数:

page=1&rows=30

响应的json数据格式:

Easyui中datagrid控件要求的数据格式为:

{total:”2”,rows:[{“id”:”1”,”name”:”张三”},{“id”:”2”,”name”:”李四”}]}



1.1.1. 分页处理

商品列表的展示是一个单表查询,我们可以用逆向工程。逆向工程生成的代码是不支持分页处理的,如果想进行分页需要自己编写mapper,这样就失去逆向工程的意义了。为了提高开发效率可以使用mybatis的分页插件PageHelper。

1.2. 分页插件PageHelper

1.2.1. Mybatis分页插件 - PageHelper说明

如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件。

该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页。

原理:在执行sql语句之前,对sql语句篡改,加上limit。这里用到mybatis的拦截器。就是在执行sql语句之前进行拦截,拦截之后,修改,修改之后,再执行。

1.2.2. 使用方法

第一步:把PageHelper依赖的jar包添加到工程中。官方提供的代码对逆向工程支持的不好,使用参考资料中的pagehelper-fix。

pagehelper3.4.2-fix





小柱子就没了



pagehelper右键-run as-maven-install,以jar包形式打到本地仓库。

第二步:在Mybatis配置xml中配置拦截器插件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
 <plugins>
  <!-- com.github.pagehelper为PageHelper类所在包名 -->
  <plugin interceptor="com.github.pagehelper.PageHelper">
   <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库 -->
   <property name="dialect" value="mysql" />
  </plugin>
 </plugins>
</configuration>

第三步:在代码中使用

1、设置分页信息:

//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
//紧跟着的第一个select方法会被分页
List<Country> list = countryMapper.selectIf(1);

2、取分页信息

//分页后,实际返回的结果list类型是Page<E>,如果想取出分页信息,需要强制转换为Page<E>,
Page<Country> listCountry = (Page<Country>)list;
listCountry.getTotal();

3、取分页信息的第二种方法

//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
List<Country> list = countryMapper.selectAll();
//用PageInfo对结果进行包装
PageInfo page = new PageInfo(list);
//测试PageInfo全部属性
//PageInfo包含了非常全面的分页属性
assertEquals(1, page.getPageNum());
assertEquals(10, page.getPageSize());
assertEquals(1, page.getStartRow());
assertEquals(10, page.getEndRow());
assertEquals(183, page.getTotal());
assertEquals(19, page.getPages());
assertEquals(1, page.getFirstPage());
assertEquals(8, page.getLastPage());
assertEquals(true, page.isFirstPage());
assertEquals(false, page.isLastPage());
assertEquals(false, page.isHasPreviousPage());
assertEquals(true, page.isHasNextPage());

1.1.1. 分页测试


public class PageHelperTest {

 @Test
 public void testPageHelper() {
  // 初始化spring容器
  ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-dao.xml");
  // 从容器中获得Mapper代理对象
  TbItemMapper itemMapper = ac.getBean(TbItemMapper.class);
  // 执行sql语句之前设置分页信息,使用PageHelper的startPage方法
  PageHelper.startPage(1, 10);
  // 执行查询
  TbItemExample example = new TbItemExample();
  List<TbItem> list = itemMapper.selectByExample(example);
  // 取分页信息,PageInfo。1、总记录数;2、总页数 当前页码
  PageInfo<TbItem> pageInfo = new PageInfo<>(list);
  System.out.println(pageInfo.getTotal());
  System.out.println(pageInfo.getPages());
  System.out.println(list.size());
 }
}
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP