├── README.md
├── pom.xml
└── src
└── main
└── java
└── com
└── xxg
└── mybatis
└── plugins
└── MySQLLimitPlugin.java
/README.md:
--------------------------------------------------------------------------------
1 | # mybatis-generator-limit-plugin
2 | A MyBatis Generator plugin for MySQL pagination use limit.
3 |
4 | http://xxgblog.com/2016/05/06/mybatis-generator-mysql-pagination/
5 |
6 | The project moves to https://github.com/wucao/mybatis-generator-mysql-plugin
7 |
8 | ## Usage
9 |
10 | Add the plugin `` into MyBatis Generator configuration file.
11 |
12 | ```
13 |
14 |
15 |
16 | ...
17 |
18 |
19 | ```
20 |
21 | ### Running with Maven
22 |
23 | pom.xml
24 |
25 | ```
26 |
27 |
28 | xxg-repository
29 | http://repo.maven.xxgblog.com/
30 |
31 |
32 | ```
33 |
34 | ```
35 |
36 |
37 |
38 | org.mybatis.generator
39 | mybatis-generator-maven-plugin
40 | 1.3.2
41 |
42 |
43 | mysql
44 | mysql-connector-java
45 | 5.1.34
46 |
47 |
48 | com.xxg
49 | mbg-limit-plugin
50 | 1.0.0
51 |
52 |
53 |
54 | true
55 |
56 |
57 |
58 |
59 | ```
60 |
61 | Run `mvn mybatis-generator:generator` to generate java and xml files.
62 |
63 | ### Using the Generated Objects
64 |
65 | ```
66 | XxxExample example = new XxxExample();
67 | ...
68 | example.setLimit(10); // page size limit
69 | example.setOffset(20); // offset
70 | List list = xxxMapper.selectByExample(example);
71 | ```
72 | The SQL will be:
73 | `select ... limit 20, 10`
74 |
75 | ```
76 | XxxExample example = new XxxExample();
77 | ...
78 | example.setLimit(10); // limit
79 | List list = xxxMapper.selectByExample(example);
80 | ```
81 | The SQL will be:
82 | `select ... limit 10`
83 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 | 4.0.0
6 | com.xxg
7 | mbg-limit-plugin
8 | 1.0.0
9 |
10 |
11 | UTF-8
12 |
13 |
14 |
15 |
16 | ftp-repository
17 | ftp://v0.ftp.upyun.com
18 |
19 |
20 |
21 |
22 |
23 |
24 | org.apache.maven.wagon
25 | wagon-ftp
26 | 2.10
27 |
28 |
29 |
30 |
31 | org.apache.maven.plugins
32 | maven-compiler-plugin
33 | 3.3
34 |
35 | 1.7
36 | 1.7
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | org.mybatis.generator
45 | mybatis-generator-core
46 | 1.3.2
47 |
48 |
49 |
--------------------------------------------------------------------------------
/src/main/java/com/xxg/mybatis/plugins/MySQLLimitPlugin.java:
--------------------------------------------------------------------------------
1 | package com.xxg.mybatis.plugins;
2 |
3 | import java.util.List;
4 |
5 | import org.mybatis.generator.api.IntrospectedTable;
6 | import org.mybatis.generator.api.PluginAdapter;
7 | import org.mybatis.generator.api.dom.java.Field;
8 | import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
9 | import org.mybatis.generator.api.dom.java.JavaVisibility;
10 | import org.mybatis.generator.api.dom.java.Method;
11 | import org.mybatis.generator.api.dom.java.Parameter;
12 | import org.mybatis.generator.api.dom.java.PrimitiveTypeWrapper;
13 | import org.mybatis.generator.api.dom.java.TopLevelClass;
14 | import org.mybatis.generator.api.dom.xml.Attribute;
15 | import org.mybatis.generator.api.dom.xml.TextElement;
16 | import org.mybatis.generator.api.dom.xml.XmlElement;
17 |
18 | public class MySQLLimitPlugin extends PluginAdapter {
19 |
20 | @Override
21 | public boolean validate(List list) {
22 | return true;
23 | }
24 |
25 | /**
26 | * 为每个Example类添加limit和offset属性已经set、get方法
27 | */
28 | @Override
29 | public boolean modelExampleClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
30 |
31 | PrimitiveTypeWrapper integerWrapper = FullyQualifiedJavaType.getIntInstance().getPrimitiveTypeWrapper();
32 |
33 | Field limit = new Field();
34 | limit.setName("limit");
35 | limit.setVisibility(JavaVisibility.PRIVATE);
36 | limit.setType(integerWrapper);
37 | topLevelClass.addField(limit);
38 |
39 | Method setLimit = new Method();
40 | setLimit.setVisibility(JavaVisibility.PUBLIC);
41 | setLimit.setName("setLimit");
42 | setLimit.addParameter(new Parameter(integerWrapper, "limit"));
43 | setLimit.addBodyLine("this.limit = limit;");
44 | topLevelClass.addMethod(setLimit);
45 |
46 | Method getLimit = new Method();
47 | getLimit.setVisibility(JavaVisibility.PUBLIC);
48 | getLimit.setReturnType(integerWrapper);
49 | getLimit.setName("getLimit");
50 | getLimit.addBodyLine("return limit;");
51 | topLevelClass.addMethod(getLimit);
52 |
53 | Field offset = new Field();
54 | offset.setName("offset");
55 | offset.setVisibility(JavaVisibility.PRIVATE);
56 | offset.setType(integerWrapper);
57 | topLevelClass.addField(offset);
58 |
59 | Method setOffset = new Method();
60 | setOffset.setVisibility(JavaVisibility.PUBLIC);
61 | setOffset.setName("setOffset");
62 | setOffset.addParameter(new Parameter(integerWrapper, "offset"));
63 | setOffset.addBodyLine("this.offset = offset;");
64 | topLevelClass.addMethod(setOffset);
65 |
66 | Method getOffset = new Method();
67 | getOffset.setVisibility(JavaVisibility.PUBLIC);
68 | getOffset.setReturnType(integerWrapper);
69 | getOffset.setName("getOffset");
70 | getOffset.addBodyLine("return offset;");
71 | topLevelClass.addMethod(getOffset);
72 |
73 | return true;
74 | }
75 |
76 | /**
77 | * 为Mapper.xml的selectByExample添加limit
78 | */
79 | @Override
80 | public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated(XmlElement element,
81 | IntrospectedTable introspectedTable) {
82 |
83 | XmlElement ifLimitNotNullElement = new XmlElement("if");
84 | ifLimitNotNullElement.addAttribute(new Attribute("test", "limit != null"));
85 |
86 | XmlElement ifOffsetNotNullElement = new XmlElement("if");
87 | ifOffsetNotNullElement.addAttribute(new Attribute("test", "offset != null"));
88 | ifOffsetNotNullElement.addElement(new TextElement("limit ${offset}, ${limit}"));
89 | ifLimitNotNullElement.addElement(ifOffsetNotNullElement);
90 |
91 | XmlElement ifOffsetNullElement = new XmlElement("if");
92 | ifOffsetNullElement.addAttribute(new Attribute("test", "offset == null"));
93 | ifOffsetNullElement.addElement(new TextElement("limit ${limit}"));
94 | ifLimitNotNullElement.addElement(ifOffsetNullElement);
95 |
96 | element.addElement(ifLimitNotNullElement);
97 |
98 | return true;
99 | }
100 | }
101 |
--------------------------------------------------------------------------------