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.getAliasedEscapedColumnName;
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 ProviderUpdateByExampleSelectiveMethodGenerator extends AbstractJavaProviderMethodGenerator {
34
35 @Override
36 public void addClassElements(TopLevelClass topLevelClass) {
37 Method method = new Method(introspectedTable.getUpdateByExampleSelectiveStatementId());
38 method.setReturnType(FullyQualifiedJavaType.getStringInstance());
39 method.setVisibility(JavaVisibility.PUBLIC);
40 method.addParameter(new Parameter(
41 new FullyQualifiedJavaType("java.util.Map<java.lang.String, java.lang.Object>"),
42 "parameter"));
43
44 Set<FullyQualifiedJavaType> importedTypes = initializeImportedTypes("java.util.Map");
45
46 FullyQualifiedJavaType recordClass = introspectedTable.getRules().calculateAllFieldsClass();
47 importedTypes.add(recordClass);
48 method.addBodyLine(String.format("%s row = (%s) parameter.get(\"row\");",
49 recordClass.getShortName(), recordClass.getShortName()));
50
51 FullyQualifiedJavaType example = new FullyQualifiedJavaType(introspectedTable.getExampleType());
52 importedTypes.add(example);
53 method.addBodyLine(String.format("%s example = (%s) parameter.get(\"example\");",
54 example.getShortName(), example.getShortName()));
55
56 context.getCommentGenerator().addGeneralMethodComment(method, introspectedTable);
57
58 method.addBodyLine("");
59
60 method.addBodyLine("SQL sql = new SQL();");
61
62 method.addBodyLine(String.format("sql.UPDATE(\"%s\");",
63 escapeStringForJava(introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime())));
64 method.addBodyLine("");
65
66 for (IntrospectedColumn introspectedColumn :
67 ListUtilities.removeGeneratedAlwaysColumns(introspectedTable.getAllColumns())) {
68 if (!introspectedColumn.getFullyQualifiedJavaType().isPrimitive()) {
69 method.addBodyLine(String.format("if (row.%s() != null) {",
70 getGetterMethodName(introspectedColumn.getJavaProperty(),
71 introspectedColumn.getFullyQualifiedJavaType())));
72 }
73
74 StringBuilder sb = new StringBuilder();
75 sb.append(getParameterClause(introspectedColumn));
76 sb.insert(2, "row.");
77
78 method.addBodyLine(String.format("sql.SET(\"%s = %s\");",
79 escapeStringForJava(getAliasedEscapedColumnName(introspectedColumn)),
80 sb.toString()));
81
82 if (!introspectedColumn.getFullyQualifiedJavaType().isPrimitive()) {
83 method.addBodyLine("}");
84 }
85
86 method.addBodyLine("");
87 }
88
89 method.addBodyLine("applyWhere(sql, example, true);");
90 method.addBodyLine("return sql.toString();");
91
92 if (context.getPlugins()
93 .providerUpdateByExampleSelectiveMethodGenerated(method, topLevelClass, introspectedTable)) {
94 topLevelClass.addImportedTypes(importedTypes);
95 topLevelClass.addMethod(method);
96 }
97 }
98 }