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 public class SqlProviderGenerator extends AbstractJavaGenerator {
42
43 public SqlProviderGenerator(String project) {
44 super(project);
45 }
46
47 @Override
48 public List<CompilationUnit> getCompilationUnits() {
49 progressCallback.startTask(getString("Progress.18",
50 introspectedTable.getFullyQualifiedTable().toString()));
51 CommentGenerator commentGenerator = context.getCommentGenerator();
52
53 FullyQualifiedJavaType type = new FullyQualifiedJavaType(introspectedTable.getMyBatis3SqlProviderType());
54 TopLevelClass topLevelClass = new TopLevelClass(type);
55 topLevelClass.setVisibility(JavaVisibility.PUBLIC);
56 commentGenerator.addJavaFileComment(topLevelClass);
57
58 boolean addApplyWhereMethod;
59 addApplyWhereMethod = addCountByExampleMethod(topLevelClass);
60 addApplyWhereMethod |= addDeleteByExampleMethod(topLevelClass);
61 addInsertSelectiveMethod(topLevelClass);
62 addApplyWhereMethod |= addSelectByExampleWithBLOBsMethod(topLevelClass);
63 addApplyWhereMethod |= addSelectByExampleWithoutBLOBsMethod(topLevelClass);
64 addApplyWhereMethod |= addUpdateByExampleSelectiveMethod(topLevelClass);
65 addApplyWhereMethod |= addUpdateByExampleWithBLOBsMethod(topLevelClass);
66 addApplyWhereMethod |= addUpdateByExampleWithoutBLOBsMethod(topLevelClass);
67 addUpdateByPrimaryKeySelectiveMethod(topLevelClass);
68
69 if (addApplyWhereMethod) {
70 addApplyWhereMethod(topLevelClass);
71 }
72
73 List<CompilationUnit> answer = new ArrayList<>();
74
75 if (!topLevelClass.getMethods().isEmpty()
76 && context.getPlugins().providerGenerated(topLevelClass, introspectedTable)) {
77 answer.add(topLevelClass);
78 }
79
80 return answer;
81 }
82
83 protected boolean addCountByExampleMethod(TopLevelClass topLevelClass) {
84 boolean rc = false;
85 if (introspectedTable.getRules().generateCountByExample()) {
86 AbstractJavaProviderMethodGenerator methodGenerator = new ProviderCountByExampleMethodGenerator();
87 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
88 rc = true;
89 }
90
91 return rc;
92 }
93
94 protected boolean addDeleteByExampleMethod(TopLevelClass topLevelClass) {
95 boolean rc = false;
96 if (introspectedTable.getRules().generateDeleteByExample()) {
97 AbstractJavaProviderMethodGenerator methodGenerator = new ProviderDeleteByExampleMethodGenerator();
98 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
99 rc = true;
100 }
101
102 return rc;
103 }
104
105 protected void addInsertSelectiveMethod(TopLevelClass topLevelClass) {
106 if (introspectedTable.getRules().generateInsertSelective()) {
107 AbstractJavaProviderMethodGenerator methodGenerator = new ProviderInsertSelectiveMethodGenerator();
108 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
109 }
110 }
111
112 protected boolean addSelectByExampleWithBLOBsMethod(TopLevelClass topLevelClass) {
113 boolean rc = false;
114 if (introspectedTable.getRules().generateSelectByExampleWithBLOBs()) {
115 AbstractJavaProviderMethodGenerator methodGenerator = new ProviderSelectByExampleWithBLOBsMethodGenerator();
116 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
117 rc = true;
118 }
119
120 return rc;
121 }
122
123 protected boolean addSelectByExampleWithoutBLOBsMethod(TopLevelClass topLevelClass) {
124 boolean rc = false;
125 if (introspectedTable.getRules().generateSelectByExampleWithoutBLOBs()) {
126 AbstractJavaProviderMethodGenerator methodGenerator =
127 new ProviderSelectByExampleWithoutBLOBsMethodGenerator();
128 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
129 rc = true;
130 }
131
132 return rc;
133 }
134
135 protected boolean addUpdateByExampleSelectiveMethod(TopLevelClass topLevelClass) {
136 boolean rc = false;
137 if (introspectedTable.getRules().generateUpdateByExampleSelective()) {
138 AbstractJavaProviderMethodGenerator methodGenerator = new ProviderUpdateByExampleSelectiveMethodGenerator();
139 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
140 rc = true;
141 }
142
143 return rc;
144 }
145
146 protected boolean addUpdateByExampleWithBLOBsMethod(TopLevelClass topLevelClass) {
147 boolean rc = false;
148 if (introspectedTable.getRules().generateUpdateByExampleWithBLOBs()) {
149 AbstractJavaProviderMethodGenerator methodGenerator = new ProviderUpdateByExampleWithBLOBsMethodGenerator();
150 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
151 rc = true;
152 }
153
154 return rc;
155 }
156
157 protected boolean addUpdateByExampleWithoutBLOBsMethod(TopLevelClass topLevelClass) {
158 boolean rc = false;
159 if (introspectedTable.getRules().generateUpdateByExampleWithoutBLOBs()) {
160 AbstractJavaProviderMethodGenerator methodGenerator =
161 new ProviderUpdateByExampleWithoutBLOBsMethodGenerator();
162 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
163 rc = true;
164 }
165
166 return rc;
167 }
168
169 protected void addUpdateByPrimaryKeySelectiveMethod(TopLevelClass topLevelClass) {
170 if (introspectedTable.getRules().generateUpdateByPrimaryKeySelective()) {
171 AbstractJavaProviderMethodGenerator methodGenerator =
172 new ProviderUpdateByPrimaryKeySelectiveMethodGenerator();
173 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
174 }
175 }
176
177 protected void addApplyWhereMethod(TopLevelClass topLevelClass) {
178 AbstractJavaProviderMethodGenerator methodGenerator = new ProviderApplyWhereMethodGenerator();
179 initializeAndExecuteGenerator(methodGenerator, topLevelClass);
180 }
181
182 protected void initializeAndExecuteGenerator(AbstractJavaProviderMethodGenerator methodGenerator,
183 TopLevelClass topLevelClass) {
184 methodGenerator.setContext(context);
185 methodGenerator.setIntrospectedTable(introspectedTable);
186 methodGenerator.setProgressCallback(progressCallback);
187 methodGenerator.setWarnings(warnings);
188 methodGenerator.addClassElements(topLevelClass);
189 }
190 }