1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.generator.codegen.mybatis3.xmlmapper.elements;
17
18 import org.mybatis.generator.api.IntrospectedColumn;
19 import org.mybatis.generator.api.dom.xml.Attribute;
20 import org.mybatis.generator.api.dom.xml.TextElement;
21 import org.mybatis.generator.api.dom.xml.XmlElement;
22 import org.mybatis.generator.codegen.mybatis3.ListUtilities;
23 import org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities;
24
25 public class UpdateByPrimaryKeySelectiveElementGenerator extends AbstractXmlElementGenerator {
26
27 public UpdateByPrimaryKeySelectiveElementGenerator() {
28 super();
29 }
30
31 @Override
32 public void addElements(XmlElement parentElement) {
33 XmlElement answer = new XmlElement("update");
34
35 answer.addAttribute(new Attribute(
36 "id", introspectedTable.getUpdateByPrimaryKeySelectiveStatementId()));
37
38 String parameterType;
39
40 if (introspectedTable.getRules().generateRecordWithBLOBsClass()) {
41 parameterType = introspectedTable.getRecordWithBLOBsType();
42 } else {
43 parameterType = introspectedTable.getBaseRecordType();
44 }
45
46 answer.addAttribute(new Attribute("parameterType", parameterType));
47
48 context.getCommentGenerator().addComment(answer);
49
50 StringBuilder sb = new StringBuilder();
51
52 sb.append("update ");
53 sb.append(introspectedTable.getFullyQualifiedTableNameAtRuntime());
54 answer.addElement(new TextElement(sb.toString()));
55
56 XmlElement dynamicElement = new XmlElement("set");
57 answer.addElement(dynamicElement);
58
59 for (IntrospectedColumn introspectedColumn :
60 ListUtilities.removeGeneratedAlwaysColumns(introspectedTable.getNonPrimaryKeyColumns())) {
61 sb.setLength(0);
62 sb.append(introspectedColumn.getJavaProperty());
63 sb.append(" != null");
64 XmlElement isNotNullElement = new XmlElement("if");
65 isNotNullElement.addAttribute(new Attribute("test", sb.toString()));
66 dynamicElement.addElement(isNotNullElement);
67
68 sb.setLength(0);
69 sb.append(MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn));
70 sb.append(" = ");
71 sb.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn));
72 sb.append(',');
73
74 isNotNullElement.addElement(new TextElement(sb.toString()));
75 }
76
77 buildPrimaryKeyWhereClause().forEach(answer::addElement);
78
79 if (context.getPlugins().sqlMapUpdateByPrimaryKeySelectiveElementGenerated(answer, introspectedTable)) {
80 parentElement.addElement(answer);
81 }
82 }
83 }