View Javadoc
1   /*
2    *    Copyright 2006-2023 the original author or authors.
3    *
4    *    Licensed under the Apache License, Version 2.0 (the "License");
5    *    you may not use this file except in compliance with the License.
6    *    You may obtain a copy of the License at
7    *
8    *       https://www.apache.org/licenses/LICENSE-2.0
9    *
10   *    Unless required by applicable law or agreed to in writing, software
11   *    distributed under the License is distributed on an "AS IS" BASIS,
12   *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *    See the License for the specific language governing permissions and
14   *    limitations under the License.
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", //$NON-NLS-1$
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 }