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.xmlmapper;
17  
18  import static org.mybatis.generator.internal.util.messages.Messages.getString;
19  
20  import org.mybatis.generator.api.FullyQualifiedTable;
21  import org.mybatis.generator.api.dom.xml.Attribute;
22  import org.mybatis.generator.api.dom.xml.Document;
23  import org.mybatis.generator.api.dom.xml.XmlElement;
24  import org.mybatis.generator.codegen.AbstractXmlGenerator;
25  import org.mybatis.generator.codegen.XmlConstants;
26  import org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.AbstractXmlElementGenerator;
27  import org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.DeleteByPrimaryKeyElementGenerator;
28  import org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.InsertElementGenerator;
29  import org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.ResultMapWithoutBLOBsElementGenerator;
30  import org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.SimpleSelectAllElementGenerator;
31  import org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.SimpleSelectByPrimaryKeyElementGenerator;
32  import org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.UpdateByPrimaryKeyWithoutBLOBsElementGenerator;
33  
34  public class SimpleXMLMapperGenerator extends AbstractXmlGenerator {
35  
36      public SimpleXMLMapperGenerator() {
37          super();
38      }
39  
40      protected XmlElement getSqlMapElement() {
41          FullyQualifiedTable table = introspectedTable.getFullyQualifiedTable();
42          progressCallback.startTask(getString("Progress.12", table.toString())); //$NON-NLS-1$
43          XmlElement answer = new XmlElement("mapper"); //$NON-NLS-1$
44          String namespace = introspectedTable.getMyBatis3SqlMapNamespace();
45          answer.addAttribute(new Attribute("namespace", namespace)); //$NON-NLS-1$
46  
47          context.getCommentGenerator().addRootComment(answer);
48  
49          addResultMapElement(answer);
50          addDeleteByPrimaryKeyElement(answer);
51          addInsertElement(answer);
52          addUpdateByPrimaryKeyElement(answer);
53          addSelectByPrimaryKeyElement(answer);
54          addSelectAllElement(answer);
55  
56          return answer;
57      }
58  
59      protected void addResultMapElement(XmlElement parentElement) {
60          if (introspectedTable.getRules().generateBaseResultMap()) {
61              AbstractXmlElementGenerator elementGenerator = new ResultMapWithoutBLOBsElementGenerator(true);
62              initializeAndExecuteGenerator(elementGenerator, parentElement);
63          }
64      }
65  
66      protected void addSelectByPrimaryKeyElement(XmlElement parentElement) {
67          if (introspectedTable.getRules().generateSelectByPrimaryKey()) {
68              AbstractXmlElementGenerator elementGenerator = new SimpleSelectByPrimaryKeyElementGenerator();
69              initializeAndExecuteGenerator(elementGenerator, parentElement);
70          }
71      }
72  
73      protected void addSelectAllElement(XmlElement parentElement) {
74          AbstractXmlElementGenerator elementGenerator = new SimpleSelectAllElementGenerator();
75          initializeAndExecuteGenerator(elementGenerator, parentElement);
76      }
77  
78      protected void addDeleteByPrimaryKeyElement(XmlElement parentElement) {
79          if (introspectedTable.getRules().generateDeleteByPrimaryKey()) {
80              AbstractXmlElementGenerator elementGenerator = new DeleteByPrimaryKeyElementGenerator(true);
81              initializeAndExecuteGenerator(elementGenerator, parentElement);
82          }
83      }
84  
85      protected void addInsertElement(XmlElement parentElement) {
86          if (introspectedTable.getRules().generateInsert()) {
87              AbstractXmlElementGenerator elementGenerator = new InsertElementGenerator(true);
88              initializeAndExecuteGenerator(elementGenerator, parentElement);
89          }
90      }
91  
92      protected void addUpdateByPrimaryKeyElement(XmlElement parentElement) {
93          if (introspectedTable.getRules().generateUpdateByPrimaryKeySelective()) {
94              AbstractXmlElementGenerator elementGenerator = new UpdateByPrimaryKeyWithoutBLOBsElementGenerator(true);
95              initializeAndExecuteGenerator(elementGenerator, parentElement);
96          }
97      }
98  
99      protected void initializeAndExecuteGenerator(AbstractXmlElementGenerator elementGenerator,
100                                                  XmlElement parentElement) {
101         elementGenerator.setContext(context);
102         elementGenerator.setIntrospectedTable(introspectedTable);
103         elementGenerator.setProgressCallback(progressCallback);
104         elementGenerator.setWarnings(warnings);
105         elementGenerator.addElements(parentElement);
106     }
107 
108     @Override
109     public Document getDocument() {
110         Document document = new Document(XmlConstants.MYBATIS3_MAPPER_PUBLIC_ID,
111                 XmlConstants.MYBATIS3_MAPPER_SYSTEM_ID);
112         document.setRootElement(getSqlMapElement());
113 
114         if (!context.getPlugins().sqlMapDocumentGenerated(document, introspectedTable)) {
115             document = null;
116         }
117 
118         return document;
119     }
120 }