10 | *
11 | * @version 1.0.0,2015-11-6
12 | * @author li.sy
13 | * @since 1.0.0
14 | */
15 |
16 | public interface BaseDao
13 | * @version 1.0.0,2015-11-6
14 | * @author li.sy
15 | * @since 1.0.0
16 | */
17 | public class NoId
18 | implements Serializable
19 | {
20 |
21 | private static final long serialVersionUID = -5765735620723314936L;
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/tangdi/def/toolkit/mybatis/generator/AddPaginationElementGenerator.java:
--------------------------------------------------------------------------------
1 | package com.tangdi.def.toolkit.mybatis.generator;
2 |
3 | import java.util.Iterator;
4 | import java.util.List;
5 | import org.mybatis.generator.api.CommentGenerator;
6 | import org.mybatis.generator.api.IntrospectedColumn;
7 | import org.mybatis.generator.api.IntrospectedTable;
8 | import org.mybatis.generator.api.dom.xml.Attribute;
9 | import org.mybatis.generator.api.dom.xml.TextElement;
10 | import org.mybatis.generator.api.dom.xml.XmlElement;
11 | import org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities;
12 | import org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.AbstractXmlElementGenerator;
13 | import org.mybatis.generator.config.Context;
14 |
15 | /***
16 | * add pageation sql in mapper.xml,only support mysql and oracle db
17 | * @author li.sy
18 | * 2016-04-22 14:04:21
19 | */
20 | public class AddPaginationElementGenerator extends AbstractXmlElementGenerator
21 | {
22 | public void addElements(XmlElement parentElement)
23 | {
24 | //add base_column_list when columns = primarykeycolumns
25 | if(this.introspectedTable.getAllColumns().size() == this.introspectedTable.getPrimaryKeyColumns().size() || this.introspectedTable.getPrimaryKeyColumns().size() ==0){
26 | XmlElement answer = new XmlElement("sql");
27 | answer.addAttribute(new Attribute("id", introspectedTable.getBaseColumnListId()));
28 | context.getCommentGenerator().addComment(answer);
29 | StringBuilder sb = new StringBuilder();
30 | Iterator iter = introspectedTable.getNonBLOBColumns().iterator();
31 | do
32 | {
33 | if(!iter.hasNext())
34 | break;
35 | sb.append(MyBatis3FormattingUtilities.getSelectListPhrase((IntrospectedColumn)iter.next()));
36 | if(iter.hasNext())
37 | sb.append(", ");
38 | if(sb.length() > 80)
39 | {
40 | answer.addElement(new TextElement(sb.toString()));
41 | sb.setLength(0);
42 | }
43 | } while(true);
44 | if(sb.length() > 0)
45 | answer.addElement(new TextElement(sb.toString()));
46 | if(context.getPlugins().sqlMapBaseColumnListElementGenerated(answer, introspectedTable))
47 | parentElement.addElement(answer);
48 | }
49 | //add header sql
50 | XmlElement sqlHeader = new XmlElement("sql");
51 | sqlHeader.addAttribute(new Attribute("id", "pageHeader"));
52 | this.context.getCommentGenerator().addComment(sqlHeader);
53 |
54 | XmlElement chooseElement = new XmlElement("choose");
55 | XmlElement whenElement = new XmlElement("when");
56 | whenElement.addAttribute(new Attribute("test", "_databaseId == 'mysql'"));
57 | chooseElement.addElement(whenElement);
58 |
59 | XmlElement otherElement = new XmlElement("otherwise");
60 | XmlElement ifElement = new XmlElement("if");
61 | ifElement.addAttribute(new Attribute("test", "start != null and end != null"));
62 | ifElement.addElement(new TextElement("select * from (select a.*, rownum rn from ("));
63 | otherElement.addElement(ifElement);
64 |
65 | chooseElement.addElement(otherElement);
66 | sqlHeader.addElement(chooseElement);
67 | parentElement.addElement(sqlHeader);
68 |
69 | //add footer sql
70 | XmlElement sqlFooter = new XmlElement("sql");
71 | sqlFooter.addAttribute(new Attribute("id", "pageFooter"));
72 | this.context.getCommentGenerator().addComment(sqlFooter);
73 |
74 | XmlElement chooseElement2 = new XmlElement("choose");
75 |
76 | XmlElement whenElement2 = new XmlElement("when");
77 | whenElement2.addAttribute(new Attribute("test", "_databaseId == 'mysql'"));
78 | XmlElement ifElementMySql = new XmlElement("if");
79 | ifElementMySql.addAttribute(new Attribute("test", "start != null and limit != null"));
80 | ifElementMySql.addElement(new TextElement("limit ${start}, ${limit}"));
81 | whenElement2.addElement(ifElementMySql);
82 | chooseElement2.addElement(whenElement2);
83 |
84 | XmlElement otherElement2 = new XmlElement("otherwise");
85 | XmlElement ifElement2 = new XmlElement("if");
86 | ifElement2.addAttribute(new Attribute("test", "start != null and end != null"));
87 | ifElement2.addElement(new TextElement(") a where rownum <= #{end}) where rn >= #{start}"));
88 | otherElement2.addElement(ifElement2);
89 |
90 | chooseElement2.addElement(otherElement2);
91 | sqlFooter.addElement(chooseElement2);
92 | parentElement.addElement(sqlFooter);
93 |
94 | //selectAllByPager
95 | XmlElement pageElement = new XmlElement("select");
96 |
97 | pageElement.addAttribute(new Attribute("id", "selectByPager"));
98 | pageElement.addAttribute(
99 | new Attribute("resultMap",
100 | this.introspectedTable.getBaseResultMapId()));
101 | pageElement.addAttribute(new Attribute("parameterType", "map"));
102 | this.context.getCommentGenerator().addComment(pageElement);
103 |
104 | XmlElement includeHeadElement = new XmlElement("include");
105 | includeHeadElement.addAttribute(new Attribute("refid", "pageHeader"));
106 | pageElement.addElement(includeHeadElement);
107 | pageElement.addElement(new TextElement("select"));
108 | XmlElement basicMapElement = new XmlElement("include");
109 | basicMapElement.addAttribute(new Attribute("refid", "Base_Column_List"));
110 | pageElement.addElement(basicMapElement);
111 | StringBuilder sb = new StringBuilder();
112 | sb.setLength(0);
113 | sb.append(" from ");
114 | sb.append(this.introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime());
115 | pageElement.addElement(new TextElement(sb.toString()));
116 |
117 | XmlElement whereElement = new XmlElement("trim");
118 | whereElement.addAttribute(new Attribute("prefix", "WHERE"));
119 | whereElement.addAttribute(new Attribute("prefixOverrides", "AND"));
120 | pageElement.addElement(whereElement);
121 |
122 | List columns = this.introspectedTable.getAllColumns();
123 | for(int i = 0 ; i < columns.size() ; i++ ){
124 | IntrospectedColumn column = (IntrospectedColumn)columns.get(i);
125 | String columnName = column.getActualColumnName();
126 | String colJavaName = column.getJavaProperty();
127 | XmlElement ifExistElement = new XmlElement("if");
128 | ifExistElement.addAttribute(new Attribute("test ", colJavaName + " !=null"));
129 | sb.setLength(0);
130 | sb.append(" and ").
131 | append(columnName).
132 | append(" = #{").
133 | append(colJavaName).
134 | append(",jdbcType=").
135 | append(column.getJdbcTypeName()).
136 | append("}");
137 | ifExistElement.addElement(new TextElement(sb.toString()));
138 | whereElement.addElement(ifExistElement);
139 | }
140 | XmlElement includeFooterElement = new XmlElement("include");
141 | includeFooterElement.addAttribute(new Attribute("refid", "pageFooter"));
142 | pageElement.addElement(includeFooterElement);
143 | parentElement.addElement(pageElement);
144 |
145 | addCondition(parentElement);
146 | addCountCondition(parentElement);
147 | }
148 | /***
149 | * 添加条件查询
150 | * @param parentElement
151 | */
152 | public void addCondition(XmlElement parentElement){
153 | //selectAllByPager
154 | XmlElement pageElement = new XmlElement("select");
155 |
156 | pageElement.addAttribute(new Attribute("id", "selectByCondition"));
157 | pageElement.addAttribute(
158 | new Attribute("resultMap",
159 | this.introspectedTable.getBaseResultMapId()));
160 | pageElement.addAttribute(new Attribute("parameterType", "map"));
161 | this.context.getCommentGenerator().addComment(pageElement);
162 |
163 |
164 | pageElement.addElement(new TextElement("select"));
165 | XmlElement basicMapElement = new XmlElement("include");
166 | basicMapElement.addAttribute(new Attribute("refid", "Base_Column_List"));
167 | pageElement.addElement(basicMapElement);
168 | StringBuilder sb = new StringBuilder();
169 | sb.setLength(0);
170 | sb.append(" from ");
171 | sb.append(this.introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime());
172 | pageElement.addElement(new TextElement(sb.toString()));
173 |
174 | XmlElement whereElement = new XmlElement("trim");
175 | whereElement.addAttribute(new Attribute("prefix", "WHERE"));
176 | whereElement.addAttribute(new Attribute("prefixOverrides", "AND"));
177 | pageElement.addElement(whereElement);
178 |
179 | List columns = this.introspectedTable.getAllColumns();
180 | for(int i = 0 ; i < columns.size() ; i++ ){
181 | IntrospectedColumn column = (IntrospectedColumn)columns.get(i);
182 | String columnName = column.getActualColumnName();
183 | String colJavaName = column.getJavaProperty();
184 | XmlElement ifExistElement = new XmlElement("if");
185 | ifExistElement.addAttribute(new Attribute("test ", colJavaName + " !=null"));
186 | sb.setLength(0);
187 | sb.append(" and ").
188 | append(columnName).
189 | append(" = #{").
190 | append(colJavaName).
191 | append(",jdbcType=").
192 | append(column.getJdbcTypeName()).
193 | append("}");
194 | ifExistElement.addElement(new TextElement(sb.toString()));
195 | whereElement.addElement(ifExistElement);
196 | }
197 | parentElement.addElement(pageElement);
198 | }
199 | /***
200 | * 添加条件查询记录总数
201 | * @param parentElement
202 | */
203 | public void addCountCondition(XmlElement parentElement){
204 | //selectAllByPager
205 | XmlElement pageElement = new XmlElement("select");
206 |
207 | pageElement.addAttribute(new Attribute("id", "countByCondition"));
208 | pageElement.addAttribute(
209 | new Attribute("resultType",
210 | "java.lang.Integer"));
211 | pageElement.addAttribute(new Attribute("parameterType", "map"));
212 | this.context.getCommentGenerator().addComment(pageElement);
213 |
214 |
215 | pageElement.addElement(new TextElement("select count(1)"));
216 | StringBuilder sb = new StringBuilder();
217 | sb.setLength(0);
218 | sb.append(" from ");
219 | sb.append(this.introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime());
220 | pageElement.addElement(new TextElement(sb.toString()));
221 |
222 | XmlElement whereElement = new XmlElement("trim");
223 | whereElement.addAttribute(new Attribute("prefix", "WHERE"));
224 | whereElement.addAttribute(new Attribute("prefixOverrides", "AND"));
225 | pageElement.addElement(whereElement);
226 |
227 | List columns = this.introspectedTable.getAllColumns();
228 | for(int i = 0 ; i < columns.size() ; i++ ){
229 | IntrospectedColumn column = (IntrospectedColumn)columns.get(i);
230 | String columnName = column.getActualColumnName();
231 | String colJavaName = column.getJavaProperty();
232 | XmlElement ifExistElement = new XmlElement("if");
233 | ifExistElement.addAttribute(new Attribute("test ", colJavaName + " !=null"));
234 | sb.setLength(0);
235 | sb.append(" and ").
236 | append(columnName).
237 | append(" = #{").
238 | append(colJavaName).
239 | append(",jdbcType=").
240 | append(column.getJdbcTypeName()).
241 | append("}");
242 | ifExistElement.addElement(new TextElement(sb.toString()));
243 | whereElement.addElement(ifExistElement);
244 | }
245 | parentElement.addElement(pageElement);
246 | }
247 | }
248 |
--------------------------------------------------------------------------------
/src/main/java/com/tangdi/def/toolkit/mybatis/generator/MapperGenerator.java:
--------------------------------------------------------------------------------
1 | /*@(#)MapperGenerator.java 2015-11-6
2 | * Copy Right 2015 Bank of Communications Co.Ltd.
3 | * All Copyright Reserved
4 | */
5 |
6 | package com.tangdi.def.toolkit.mybatis.generator;
7 |
8 | import java.util.ArrayList;
9 | import java.util.List;
10 |
11 | import org.mybatis.generator.api.IntrospectedColumn;
12 | import org.mybatis.generator.api.dom.java.CompilationUnit;
13 | import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
14 | import org.mybatis.generator.api.dom.java.Interface;
15 | import org.mybatis.generator.api.dom.java.JavaVisibility;
16 | import org.mybatis.generator.codegen.AbstractJavaGenerator;
17 |
18 | /**
19 | * TODO Document MapperGenerator
20 | *
21 | * @version 1.0.0,2015-11-6
22 | * @author li.sy
23 | * @since 1.0.0
24 | */
25 | public class MapperGenerator extends AbstractJavaGenerator{
26 | public List
22 | * @version 1.0.0,2015-11-6
23 | * @author li.sy
24 | * @since 1.0.0
25 | */
26 | public class TdMapperPlugin extends PluginAdapter{
27 |
28 | public boolean validate(List
22 | * @version 1.0.0,2015-11-6
23 | * @author li.sy
24 | * @since 1.0.0
25 | */
26 | public class TdPaginationPlugin extends PluginAdapter{
27 |
28 | public boolean validate(List