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 ProviderUpdateByPrimaryKeySelectiveMethodGenerator 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.getUpdateByPrimaryKeySelectiveStatementId());
41 method.setReturnType(FullyQualifiedJavaType.getStringInstance());
42 method.setVisibility(JavaVisibility.PUBLIC);
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.UPDATE(\"%s\");",
50 escapeStringForJava(introspectedTable.getFullyQualifiedTableNameAtRuntime())));
51 method.addBodyLine("");
52
53 for (IntrospectedColumn introspectedColumn :
54 ListUtilities.removeGeneratedAlwaysColumns(introspectedTable.getNonPrimaryKeyColumns())) {
55 if (!introspectedColumn.getFullyQualifiedJavaType().isPrimitive()) {
56 method.addBodyLine(String.format("if (row.%s() != null) {",
57 getGetterMethodName(introspectedColumn.getJavaProperty(),
58 introspectedColumn.getFullyQualifiedJavaType())));
59 }
60
61 method.addBodyLine(String.format("sql.SET(\"%s = %s\");",
62 escapeStringForJava(getEscapedColumnName(introspectedColumn)),
63 getParameterClause(introspectedColumn)));
64
65 if (!introspectedColumn.getFullyQualifiedJavaType().isPrimitive()) {
66 method.addBodyLine("}");
67 }
68
69 method.addBodyLine("");
70 }
71
72 for (IntrospectedColumn introspectedColumn : introspectedTable.getPrimaryKeyColumns()) {
73 method.addBodyLine(String.format("sql.WHERE(\"%s = %s\");",
74 escapeStringForJava(getEscapedColumnName(introspectedColumn)),
75 getParameterClause(introspectedColumn)));
76 }
77
78 method.addBodyLine("");
79
80 method.addBodyLine("return sql.toString();");
81
82 if (context.getPlugins()
83 .providerUpdateByPrimaryKeySelectiveMethodGenerated(method, topLevelClass, introspectedTable)) {
84 topLevelClass.addImportedTypes(importedTypes);
85 topLevelClass.addMethod(method);
86 }
87 }
88 }