1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.generator.codegen.mybatis3.javamapper.elements.sqlprovider;
17
18 import static org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities.getEscapedColumnName;
19 import static org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities.getParameterClause;
20 import static org.mybatis.generator.internal.util.JavaBeansUtil.getGetterMethodName;
21 import static org.mybatis.generator.internal.util.StringUtility.escapeStringForJava;
22
23 import java.util.Set;
24 import java.util.TreeSet;
25
26 import org.mybatis.generator.api.IntrospectedColumn;
27 import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
28 import org.mybatis.generator.api.dom.java.JavaVisibility;
29 import org.mybatis.generator.api.dom.java.Method;
30 import org.mybatis.generator.api.dom.java.Parameter;
31 import org.mybatis.generator.api.dom.java.TopLevelClass;
32
33
34
35
36
37
38 public class ProviderInsertSelectiveMethodGenerator extends
39 AbstractJavaProviderMethodGenerator {
40
41 public ProviderInsertSelectiveMethodGenerator(boolean useLegacyBuilder) {
42 super(useLegacyBuilder);
43 }
44
45 @Override
46 public void addClassElements(TopLevelClass topLevelClass) {
47 Set<String> staticImports = new TreeSet<String>();
48 Set<FullyQualifiedJavaType> importedTypes = new TreeSet<FullyQualifiedJavaType>();
49
50 if (useLegacyBuilder) {
51 staticImports.add("org.apache.ibatis.jdbc.SqlBuilder.BEGIN");
52 staticImports.add("org.apache.ibatis.jdbc.SqlBuilder.INSERT_INTO");
53 staticImports.add("org.apache.ibatis.jdbc.SqlBuilder.SQL");
54 staticImports.add("org.apache.ibatis.jdbc.SqlBuilder.VALUES");
55 } else {
56 importedTypes.add(NEW_BUILDER_IMPORT);
57 }
58
59 FullyQualifiedJavaType fqjt = introspectedTable.getRules()
60 .calculateAllFieldsClass();
61 importedTypes.add(fqjt);
62
63 Method method = new Method(
64 introspectedTable.getInsertSelectiveStatementId());
65 method.setVisibility(JavaVisibility.PUBLIC);
66 method.setReturnType(FullyQualifiedJavaType.getStringInstance());
67 method.addParameter(new Parameter(fqjt, "record"));
68
69 context.getCommentGenerator().addGeneralMethodComment(method,
70 introspectedTable);
71
72 if (useLegacyBuilder) {
73 method.addBodyLine("BEGIN();");
74 } else {
75 method.addBodyLine("SQL sql = new SQL();");
76 }
77
78 method.addBodyLine(String.format("%sINSERT_INTO(\"%s\");",
79 builderPrefix,
80 escapeStringForJava(introspectedTable.getFullyQualifiedTableNameAtRuntime())));
81
82 for (IntrospectedColumn introspectedColumn : introspectedTable.getAllColumns()) {
83 if (introspectedColumn.isIdentity()) {
84
85 continue;
86 }
87
88 method.addBodyLine("");
89 if (!introspectedColumn.getFullyQualifiedJavaType().isPrimitive()
90 && !introspectedColumn.isSequenceColumn()) {
91 method.addBodyLine(String.format("if (record.%s() != null) {",
92 getGetterMethodName(introspectedColumn.getJavaProperty(),
93 introspectedColumn.getFullyQualifiedJavaType())));
94 }
95 method.addBodyLine(String.format("%sVALUES(\"%s\", \"%s\");",
96 builderPrefix,
97 escapeStringForJava(getEscapedColumnName(introspectedColumn)),
98 getParameterClause(introspectedColumn)));
99
100 if (!introspectedColumn.getFullyQualifiedJavaType().isPrimitive()
101 && !introspectedColumn.isSequenceColumn()) {
102 method.addBodyLine("}");
103 }
104 }
105
106 method.addBodyLine("");
107 if (useLegacyBuilder) {
108 method.addBodyLine("return SQL();");
109 } else {
110 method.addBodyLine("return sql.toString();");
111 }
112
113 if (context.getPlugins().providerInsertSelectiveMethodGenerated(method, topLevelClass,
114 introspectedTable)) {
115 topLevelClass.addStaticImports(staticImports);
116 topLevelClass.addImportedTypes(importedTypes);
117 topLevelClass.addMethod(method);
118 }
119 }
120 }