zoukankan      html  css  js  c++  java
  • MyBatis 分页插件 PageHelper 使用

    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 即可自动生成

    具体参见  http://www.mybatis.org/generator/running/runningWithMaven.html

     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用法

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

    参见  

    https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/en/HowToUse.md

    https://github.com/pagehelper/Mybatis-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

    http://bootstrap-table.wenzhixin.net.cn/documentation/

     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.  分页效果

    7.  工程结构及源码

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

    8.  小结

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

  • 相关阅读:
    LeetCode OJ String to Integer (atoi) 字符串转数字
    HDU 1005 Number Sequence(AC代码)
    HDU 1004 Let the Balloon Rise(AC代码)
    HDU 1003 Max Sum(AC代码)
    012 Integer to Roman 整数转换成罗马数字
    011 Container With Most Water 盛最多水的容器
    010 Regular Expression Matching 正则表达式匹配
    007 Reverse Integer 旋转整数
    006 ZigZag Conversion
    005 Longest Palindromic Substring 最长回文子串
  • 原文地址:https://www.cnblogs.com/cjsblog/p/9372258.html
Copyright © 2011-2022 走看看