欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MyBatis 分页插件 PageHelper 使用

程序员文章站 2022-12-28 22:07:31
1. 引入Maven依赖 2. 生成Mapper文件 在src/main/resources下创建一个generatorConfig.xml文件,然后在终端命令行下执行 mvn mybatis-generator:generate 即可自动生成 具体参见 http://www.mybatis.org ......

1.  引入Maven依赖

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 4     <modelVersion>4.0.0</modelVersion>
 5 
 6     <groupId>com.cjs.example</groupId>
 7     <artifactId>cjs-mybatis-example</artifactId>
 8     <version>0.0.1-SNAPSHOT</version>
 9     <packaging>jar</packaging>
10 
11     <name>cjs-mybatis-example</name>
12     <description></description>
13 
14     <parent>
15         <groupId>org.springframework.boot</groupId>
16         <artifactId>spring-boot-starter-parent</artifactId>
17         <version>2.0.3.RELEASE</version>
18         <relativePath/> <!-- lookup parent from repository -->
19     </parent>
20 
21     <properties>
22         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
23         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
24         <java.version>1.8</java.version>
25     </properties>
26 
27     <dependencies>
28         <dependency>
29             <groupId>org.springframework.boot</groupId>
30             <artifactId>spring-boot-starter-web</artifactId>
31         </dependency>
32         <dependency>
33             <groupId>org.springframework.boot</groupId>
34             <artifactId>spring-boot-starter-thymeleaf</artifactId>
35         </dependency>
36         <dependency>
37             <groupId>org.mybatis.spring.boot</groupId>
38             <artifactId>mybatis-spring-boot-starter</artifactId>
39             <version>1.3.2</version>
40         </dependency>
41         <dependency>
42             <groupId>com.github.pagehelper</groupId>
43             <artifactId>pagehelper-spring-boot-starter</artifactId>
44             <version>1.2.5</version>
45         </dependency>
46 
47         <dependency>
48             <groupId>mysql</groupId>
49             <artifactId>mysql-connector-java</artifactId>
50             <scope>runtime</scope>
51         </dependency>
52         
53         <dependency>
54             <groupId>org.springframework.boot</groupId>
55             <artifactId>spring-boot-starter-test</artifactId>
56             <scope>test</scope>
57         </dependency>
58     </dependencies>
59 
60     <build>
61         <plugins>
62             <plugin>
63                 <groupId>org.springframework.boot</groupId>
64                 <artifactId>spring-boot-maven-plugin</artifactId>
65             </plugin>
66 
67             <!-- http://www.mybatis.org/generator/configreference/xmlconfig.html -->
68             <!-- http://www.mybatis.org/generator/running/runningWithMaven.html -->
69             <!-- mvn mybatis-generator:generate -->
70             <!-- mvn -Dmybatis.generator.overwrite=true mybatis-generator:generate -->
71             <plugin>
72                 <groupId>org.mybatis.generator</groupId>
73                 <artifactId>mybatis-generator-maven-plugin</artifactId>
74                 <version>1.3.7</version>
75             </plugin>
76         </plugins>
77     </build>
78 
79 
80 </project>

2.  生成Mapper文件

在src/main/resources下创建一个generatorConfig.xml文件,然后在终端命令行下执行  mvn mybatis-generator:generate 即可自动生成

具体参见  

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE generatorConfiguration
 3         PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
 4         "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
 5 
 6 <!-- http://www.mybatis.org/generator/configreference/xmlconfig.html -->
 7 
 8 <generatorConfiguration>
 9     <classPathEntry location="C:/Users/Administrator/.m2/repository/mysql/mysql-connector-java/5.1.46/mysql-connector-java-5.1.46.jar" />
10 
11     <context id="DB2Tables" targetRuntime="MyBatis3">
12         <jdbcConnection driverClass="com.mysql.jdbc.Driver"
13                         connectionURL="jdbc:mysql://10.123.52.189:3306/oh_coupon"
14                         userId="devdb"
15                         password="d^V$0Fu!/6-&lt;">
16         </jdbcConnection>
17 
18         <javaTypeResolver >
19             <property name="forceBigDecimals" value="false" />
20         </javaTypeResolver>
21 
22         <javaModelGenerator targetPackage="com.cjs.example.model" targetProject="src/main/java">
23             <property name="enableSubPackages" value="false" />
24             <property name="trimStrings" value="true" />
25         </javaModelGenerator>
26 
27         <sqlMapGenerator targetPackage="mapper"  targetProject="src/main/resources">
28             <property name="enableSubPackages" value="false" />
29         </sqlMapGenerator>
30 
31         <javaClientGenerator type="XMLMAPPER" targetPackage="com.cjs.example.dao"  targetProject="src/main/java">
32             <property name="enableSubPackages" value="false" />
33         </javaClientGenerator>
34 
35         <table tableName="tb_coupon" domainObjectName="Coupon" >
36             <ignoreColumn column="FRED" />
37         </table>
38 
39     </context>
40 </generatorConfiguration>

3.  application.yml配置

spring:
  datasource:
    url: jdbc:mysql://10.123.52.189:3306/oh_coupon
    username: devdb
    password: d^V$0Fu!/6-<
    driver-class-name: com.mysql.jdbc.Driver
mybatis:
  type-aliases-package: com.cjs.example.model
  mapper-locations: classpath:mapper/*.xml
pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true
  row-bounds-with-count: true
logging:
  level:
    com.cjs.example.dao: debug

4.  PageHelper用法

具体用法文档中写得比较详细了,这里只结合实际项目情况,给出演示:

参见  

Mapper

 1 package com.cjs.example.dao;
 2 
 3 import com.cjs.example.model.Coupon;
 4 import com.cjs.example.model.CouponExample;
 5 import java.util.List;
 6 
 7 import com.github.pagehelper.PageRowBounds;
 8 import org.apache.ibatis.annotations.Mapper;
 9 import org.springframework.stereotype.Repository;
10 
11 @Repository
12 @Mapper
13 public interface CouponMapper {
14 
15     List<Coupon> selectByExample(CouponExample example);
16 
17     List<Coupon> selectByExample(CouponExample example, PageRowBounds pageRowBounds);
18     
19 }

Service

  1 package com.cjs.example.service.impl;
  2 
  3 import com.cjs.example.dao.CouponMapper;
  4 import com.cjs.example.model.Coupon;
  5 import com.cjs.example.model.CouponExample;
  6 import com.cjs.example.service.CouponService;
  7 import com.github.pagehelper.Page;
  8 import com.github.pagehelper.PageHelper;
  9 import com.github.pagehelper.PageInfo;
 10 import com.github.pagehelper.PageRowBounds;
 11 import org.springframework.beans.factory.annotation.Autowired;
 12 import org.springframework.stereotype.Service;
 13 
 14 import java.util.List;
 15 
 16 /**
 17  * https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/en/HowToUse.md
 18  */
 19 @Service
 20 public class CouponServiceImpl implements CouponService {
 21 
 22     @Autowired
 23     private CouponMapper couponMapper;
 24 
 25     /**
 26      * 静态方法startPage
 27      */
 28     @Override
 29     public List<Coupon> getCouponListByPage(CouponExample couponExample, Integer pageNum, Integer pageSize) {
 30         //  在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可,紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。
 31         //  只要你可以保证在 PageHelper 方法调用后紧跟 MyBatis 查询方法,这就是安全的
 32         PageHelper.startPage(pageNum, pageSize);
 33         return couponMapper.selectByExample(couponExample);
 34     }
 35 
 36     /**
 37      * 分页时,实际返回的结果list类型是Page<E>,如果想取出分页信息,需要强制转换为Page<E>
 38      * 因为  public class Page<E> extends ArrayList<E> implements Closeable
 39      */
 40     @Override
 41     public Page<Coupon> getCouponListByPage1(CouponExample couponExample, Integer pageNum, Integer pageSize) {
 42         PageHelper.startPage(pageNum, pageSize);
 43         List<Coupon> list = couponMapper.selectByExample(couponExample);
 44         if (null != list) {
 45             Page<Coupon> page = (Page<Coupon>) list;
 46             System.out.println(page);
 47             return page;
 48         }
 49         return null;
 50     }
 51 
 52     /**
 53      * 用PageRowBounds
 54      */
 55     @Override
 56     public List<Coupon> getCouponListByPage2(CouponExample couponExample, Integer pageNum, Integer pageSize) {
 57         PageRowBounds pageRowBounds = new PageRowBounds(pageNum, pageSize);
 58         List<Coupon> couponList = couponMapper.selectByExample(couponExample, pageRowBounds);
 59 
 60         System.out.println(pageRowBounds.getTotal());
 61 
 62         Page<Coupon> page = (Page<Coupon>) couponList;
 63         System.out.println(page);
 64 
 65         return couponList;
 66     }
 67 
 68     @Override
 69     public Page<Coupon> getCouponListByPage3(CouponExample couponExample, Integer pageNum, Integer pageSize) {
 70         Page<Coupon> page = PageHelper.startPage(pageNum, pageSize).doSelectPage(()->couponMapper.selectByExample(couponExample));
 71         System.out.println(page);
 72         return page;
 73     }
 74 
 75     /**
 76      * 方法参数
 77      */
 78     @Override
 79     public PageInfo<Coupon> getCouponListByPage4(CouponExample couponExample, Integer pageNum, Integer pageSize) {
 80         PageInfo<Coupon> pageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(()->couponMapper.selectByExample(couponExample));
 81         System.out.println(pageInfo);
 82         return pageInfo;
 83     }
 84 
 85     /**
 86      * PageInfo
 87      */
 88     @Override
 89     public PageInfo<Coupon> getCouponListByPage5(CouponExample couponExample, Integer pageNum, Integer pageSize) {
 90         List<Coupon> list = couponMapper.selectByExample(couponExample);
 91         if (null == list) {
 92             return null;
 93         }
 94         PageInfo<Coupon> pageInfo = new PageInfo<>(list);
 95         System.out.println(pageInfo);
 96         return pageInfo;
 97     }
 98 
 99     @Override
100     public Page<Coupon> getCouponListByPage6(CouponExample couponExample, Integer offset, Integer limit) {
101         return (Page<Coupon>) couponMapper.selectByExample(couponExample, new PageRowBounds(offset, limit));
102     }
103 }

Controller

 1 package com.cjs.example.controller;
 2 
 3 import com.cjs.example.domain.PageBean;
 4 import com.cjs.example.model.Coupon;
 5 import com.cjs.example.model.CouponExample;
 6 import com.cjs.example.service.CouponService;
 7 import com.github.pagehelper.Page;
 8 import com.github.pagehelper.PageInfo;
 9 import org.springframework.beans.factory.annotation.Autowired;
10 import org.springframework.web.bind.annotation.RequestMapping;
11 import org.springframework.web.bind.annotation.RestController;
12 
13 import java.util.List;
14 
15 @RestController
16 @RequestMapping("/coupon")
17 public class CouponController {
18 
19     @Autowired
20     private CouponService couponService;
21 
22     @RequestMapping("/list")
23     public List<Coupon> list() {
24         CouponExample example = new CouponExample();
25         return couponService.getCouponListByPage(example, 1, 5);
26     }
27 
28     @RequestMapping("/list2")
29     public List<Coupon> list2() {
30         CouponExample example = new CouponExample();
31         return couponService.getCouponListByPage2(example, 0, 5);
32     }
33 
34     @RequestMapping("/list3")
35     public List<Coupon> list3() {
36         CouponExample example = new CouponExample();
37         return couponService.getCouponListByPage3(example, 1, 5);
38     }
39 
40     @RequestMapping("/list4")
41     public PageInfo<Coupon> list4() {
42         CouponExample example = new CouponExample();
43         return couponService.getCouponListByPage4(example, 1, 5);
44     }
45 
46     @RequestMapping("/list5")
47     public PageInfo<Coupon> list5() {
48         CouponExample example = new CouponExample();
49         return couponService.getCouponListByPage5(example, 1, 5);
50     }
51 
52 
53     /**
54      * Bootstrap Table
55      * http://bootstrap-table.wenzhixin.net.cn/documentation/
56      */
57     @RequestMapping("/listPage")
58     public PageBean<Coupon> listPage(Integer offset, Integer limit) {
59         CouponExample example = new CouponExample();
60         example.or().andVendorIdEqualTo(10001L).andYnEqualTo(1);
61         Page<Coupon> page = couponService.getCouponListByPage6(example, offset, limit);
62         PageBean<Coupon> pageBean = new PageBean<>();
63         pageBean.setTotal(page.getTotal());
64         pageBean.setRows(page.getResult());
65         return pageBean;
66     }
67 }

5.  index.html

 1 <!DOCTYPE html>
 2 <html lang="zh">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Index</title>
 6 
 7     <link rel="stylesheet" href="/bootstrap-3.3.7-dist/css/bootstrap.min.css">
 8     <link rel="stylesheet" href="/bootstrap-table/bootstrap-table.css">
 9 
10     <script src="/jquery/jquery-3.3.1.min.js"></script>
11     <script src="/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
12     <script src="/bootstrap-table/bootstrap-table.js"></script>
13     <script src="/bootstrap-table/locale/bootstrap-table-zh-CN.js"></script>
14 </head>
15 <body>
16     <div class="row">
17         <div class="col-xs-6">
18             <table id="table"></table>
19         </div>
20     </div>
21 
22     <script type="text/javascript">
23         /**
24          * http://bootstrap-table.wenzhixin.net.cn/documentation/
25          */
26         $('#table').bootstrapTable({
27             sidePagination: 'server',   //  服务器端分页
28             pagination: true,
29             pageNumber: 1,
30             pageSize: 10,
31             url: '/coupon/listPage',
32             columns: [{
33                 field: 'id',
34                 title: 'ID',
35                 sortable: true
36             }, {
37                 field: 'couponName',
38                 title: '名称'
39             }, {
40                 field: 'couponNum',
41                 title: '数量'
42             }, {
43                 field: 'couponAmount',
44                 title: '金额'
45             }, {
46                 field: 'releaseStartTime',
47                 title: '开始时间'
48             }, {
49                 field: 'releaseStartTime',
50                 title: '结束时间'
51             }]
52         });
53     </script>
54 </body>
55 </html>

6.  分页效果

MyBatis 分页插件 PageHelper 使用

7.  工程结构及源码

代码上传至  https://github.com/chengjiansheng/cjs-mybatis-example.git

MyBatis 分页插件 PageHelper 使用

8.  小结

个人感觉,还是PageRowBoundsPageHelper.startPage(pageNum, pageSize).doSelectPage()比较实用