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
25 import org.mybatis.generator.api.IntrospectedColumn;
26 import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
27 import org.mybatis.generator.api.dom.java.JavaVisibility;
28 import org.mybatis.generator.api.dom.java.Method;
29 import org.mybatis.generator.api.dom.java.Parameter;
30 import org.mybatis.generator.api.dom.java.TopLevelClass;
31 import org.mybatis.generator.codegen.mybatis3.ListUtilities;
32
33 public class ProviderInsertSelectiveMethodGenerator extends AbstractJavaProviderMethodGenerator {
34
35 @Override
36 public void addClassElements(TopLevelClass topLevelClass) {
37 FullyQualifiedJavaType fqjt = introspectedTable.getRules().calculateAllFieldsClass();
38 Set<FullyQualifiedJavaType> importedTypes = initializeImportedTypes(fqjt);
39
40 Method method = new Method(introspectedTable.getInsertSelectiveStatementId());
41 method.setVisibility(JavaVisibility.PUBLIC);
42 method.setReturnType(FullyQualifiedJavaType.getStringInstance());
43 method.addParameter(new Parameter(fqjt, "row"));
44
45 context.getCommentGenerator().addGeneralMethodComment(method, introspectedTable);
46
47 method.addBodyLine("SQL sql = new SQL();");
48
49 method.addBodyLine(String.format("sql.INSERT_INTO(\"%s\");",
50 escapeStringForJava(introspectedTable.getFullyQualifiedTableNameAtRuntime())));
51
52 for (IntrospectedColumn introspectedColumn :
53 ListUtilities.removeIdentityAndGeneratedAlwaysColumns(introspectedTable.getAllColumns())) {
54
55 method.addBodyLine("");
56 if (!introspectedColumn.getFullyQualifiedJavaType().isPrimitive()
57 && !introspectedColumn.isSequenceColumn()) {
58 method.addBodyLine(String.format("if (row.%s() != null) {",
59 getGetterMethodName(introspectedColumn.getJavaProperty(),
60 introspectedColumn.getFullyQualifiedJavaType())));
61 }
62 method.addBodyLine(String.format("sql.VALUES(\"%s\", \"%s\");",
63 escapeStringForJava(getEscapedColumnName(introspectedColumn)),
64 getParameterClause(introspectedColumn)));
65
66 if (!introspectedColumn.getFullyQualifiedJavaType().isPrimitive()
67 && !introspectedColumn.isSequenceColumn()) {
68 method.addBodyLine("}");
69 }
70 }
71
72 method.addBodyLine("");
73 method.addBodyLine("return sql.toString();");
74
75 if (context.getPlugins().providerInsertSelectiveMethodGenerated(method, topLevelClass, introspectedTable)) {
76 topLevelClass.addImportedTypes(importedTypes);
77 topLevelClass.addMethod(method);
78 }
79 }
80 }