1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.generator.codegen.mybatis3.javamapper;
17
18 import static org.mybatis.generator.internal.util.messages.Messages.getString;
19
20 import java.util.ArrayList;
21 import java.util.List;
22
23 import org.mybatis.generator.api.CommentGenerator;
24 import org.mybatis.generator.api.dom.java.CompilationUnit;
25 import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
26 import org.mybatis.generator.api.dom.java.JavaVisibility;
27 import org.mybatis.generator.api.dom.java.TopLevelClass;
28 import org.mybatis.generator.codegen.AbstractJavaGenerator;
29 import org.mybatis.generator.codegen.mybatis3.javamapper.elements.sqlprovider.AbstractJavaProviderMethodGenerator;
30 import org.mybatis.generator.codegen.mybatis3.javamapper.elements.sqlprovider.ProviderApplyWhereMethodGenerator;
31 import org.mybatis.generator.codegen.mybatis3.javamapper.elements.sqlprovider.ProviderCountByExampleMethodGenerator;
32 import org.mybatis.generator.codegen.mybatis3.javamapper.elements.sqlprovider.ProviderDeleteByExampleMethodGenerator;
33 import org.mybatis.generator.codegen.mybatis3.javamapper.elements.sqlprovider.ProviderInsertSelectiveMethodGenerator;
34 import org.mybatis.generator.codegen.mybatis3.javamapper.elements.sqlprovider.ProviderSelectByExampleWithBLOBsMethodGenerator;
35 import org.mybatis.generator.codegen.mybatis3.javamapper.elements.sqlprovider.ProviderSelectByExampleWithoutBLOBsMethodGenerator;
36 import org.mybatis.generator.codegen.mybatis3.javamapper.elements.sqlprovider.ProviderUpdateByExampleSelectiveMethodGenerator;
37 import org.mybatis.generator.codegen.mybatis3.javamapper.elements.sqlprovider.ProviderUpdateByExampleWithBLOBsMethodGenerator;
38 import org.mybatis.generator.codegen.mybatis3.javamapper.elements.sqlprovider.ProviderUpdateByExampleWithoutBLOBsMethodGenerator;
39 import org.mybatis.generator.codegen.mybatis3.javamapper.elements.sqlprovider.ProviderUpdateByPrimaryKeySelectiveMethodGenerator;
40
41
42
43
44
45
46 public class SqlProviderGenerator extends AbstractJavaGenerator {
47
48 private boolean useLegacyBuilder;
49
50 public SqlProviderGenerator(boolean useLegacyBuilder) {
51 super();
52 this.useLegacyBuilder = useLegacyBuilder;
53 }
54
55 @Override
56 public List<CompilationUnit> getCompilationUnits() {
57 progressCallback.startTask(getString("Progress.18",
58 introspectedTable.getFullyQualifiedTable().toString()));
59 CommentGenerator commentGenerator = context.getCommentGenerator();
60
61 FullyQualifiedJavaType type = new FullyQualifiedJavaType(
62 introspectedTable.getMyBatis3SqlProviderType());
63 TopLevelClass topLevelClass = new TopLevelClass(type);
64 topLevelClass.setVisibility(JavaVisibility.PUBLIC);
65 commentGenerator.addJavaFileComment(topLevelClass);
66
67 boolean addApplyWhereMethod = false;
68 addApplyWhereMethod |= addCountByExampleMethod(topLevelClass);
69 addApplyWhereMethod |= addDeleteByExampleMethod(topLevelClass);
70 addInsertSelectiveMethod(topLevelClass);
71 addApplyWhereMethod |= addSelectByExampleWithBLOBsMethod(topLevelClass);
72 addApplyWhereMethod |= addSelectByExampleWithoutBLOBsMethod(topLevelClass);
73 addApplyWhereMethod |= addUpdateByExampleSelectiveMethod(topLevelClass);
74 addApplyWhereMethod |= addUpdateByExampleWithBLOBsMethod(topLevelClass);
75 addApplyWhereMethod |= addUpdateByExampleWithoutBLOBsMethod(topLevelClass);
76 addUpdateByPrimaryKeySelectiveMethod(topLevelClass);
77
78 if (addApplyWhereMethod) {
79 addApplyWhereMethod(topLevelClass);
80 }
81
82 List<CompilationUnit> answer = new ArrayList<CompilationUnit>();
83
84 if (topLevelClass.getMethods().size() > 0 &&
85 context.getPlugins().providerGenerated(topLevelClass, introspectedTable)) {
86 answer.add(topLevelClass);
87 }
88
89 return answer;
90 }
91
92 protected boolean addCountByExampleMethod(TopLevelClass topLevelClass) {
93 boolean rc = false;
94 if (introspectedTable.getRules().generateCountByExample()) {
95 AbstractJavaProviderMethodGenerator methodGenerator = new ProviderCountByExampleMethodGenerator(useLegacyBuilder);
96 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
97 rc = true;
98 }
99
100 return rc;
101 }
102
103 protected boolean addDeleteByExampleMethod(TopLevelClass topLevelClass) {
104 boolean rc = false;
105 if (introspectedTable.getRules().generateDeleteByExample()) {
106 AbstractJavaProviderMethodGenerator methodGenerator = new ProviderDeleteByExampleMethodGenerator(useLegacyBuilder);
107 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
108 rc = true;
109 }
110
111 return rc;
112 }
113
114 protected void addInsertSelectiveMethod(TopLevelClass topLevelClass) {
115 if (introspectedTable.getRules().generateInsertSelective()) {
116 AbstractJavaProviderMethodGenerator methodGenerator = new ProviderInsertSelectiveMethodGenerator(useLegacyBuilder);
117 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
118 }
119 }
120
121 protected boolean addSelectByExampleWithBLOBsMethod(
122 TopLevelClass topLevelClass) {
123 boolean rc = false;
124 if (introspectedTable.getRules().generateSelectByExampleWithBLOBs()) {
125 AbstractJavaProviderMethodGenerator methodGenerator = new ProviderSelectByExampleWithBLOBsMethodGenerator(useLegacyBuilder);
126 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
127 rc = true;
128 }
129
130 return rc;
131 }
132
133 protected boolean addSelectByExampleWithoutBLOBsMethod(
134 TopLevelClass topLevelClass) {
135 boolean rc = false;
136 if (introspectedTable.getRules().generateSelectByExampleWithoutBLOBs()) {
137 AbstractJavaProviderMethodGenerator methodGenerator = new ProviderSelectByExampleWithoutBLOBsMethodGenerator(useLegacyBuilder);
138 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
139 rc = true;
140 }
141
142 return rc;
143 }
144
145 protected boolean addUpdateByExampleSelectiveMethod(
146 TopLevelClass topLevelClass) {
147 boolean rc = false;
148 if (introspectedTable.getRules().generateUpdateByExampleSelective()) {
149 AbstractJavaProviderMethodGenerator methodGenerator = new ProviderUpdateByExampleSelectiveMethodGenerator(useLegacyBuilder);
150 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
151 rc = true;
152 }
153
154 return rc;
155 }
156
157 protected boolean addUpdateByExampleWithBLOBsMethod(
158 TopLevelClass topLevelClass) {
159 boolean rc = false;
160 if (introspectedTable.getRules().generateUpdateByExampleWithBLOBs()) {
161 AbstractJavaProviderMethodGenerator methodGenerator = new ProviderUpdateByExampleWithBLOBsMethodGenerator(useLegacyBuilder);
162 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
163 rc = true;
164 }
165
166 return rc;
167 }
168
169 protected boolean addUpdateByExampleWithoutBLOBsMethod(
170 TopLevelClass topLevelClass) {
171 boolean rc = false;
172 if (introspectedTable.getRules().generateUpdateByExampleWithoutBLOBs()) {
173 AbstractJavaProviderMethodGenerator methodGenerator = new ProviderUpdateByExampleWithoutBLOBsMethodGenerator(useLegacyBuilder);
174 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
175 rc = true;
176 }
177
178 return rc;
179 }
180
181 protected void addUpdateByPrimaryKeySelectiveMethod(
182 TopLevelClass topLevelClass) {
183 if (introspectedTable.getRules().generateUpdateByPrimaryKeySelective()) {
184 AbstractJavaProviderMethodGenerator methodGenerator = new ProviderUpdateByPrimaryKeySelectiveMethodGenerator(useLegacyBuilder);
185 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
186 }
187 }
188
189 protected void addApplyWhereMethod(TopLevelClass topLevelClass) {
190 AbstractJavaProviderMethodGenerator methodGenerator = new ProviderApplyWhereMethodGenerator(useLegacyBuilder);
191 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
192 }
193
194 protected void initializeAndExecuteGenerator(
195 AbstractJavaProviderMethodGenerator methodGenerator,
196 TopLevelClass topLevelClass) {
197 methodGenerator.setContext(context);
198 methodGenerator.setIntrospectedTable(introspectedTable);
199 methodGenerator.setProgressCallback(progressCallback);
200 methodGenerator.setWarnings(warnings);
201 methodGenerator.addClassElements(topLevelClass);
202 }
203 }