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-<">
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. 小結
個人感覺,還是PageRowBounds和PageHelper.startPage(pageNum, pageSize).doSelectPage()比較實用