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 static org.mybatis.generator.internal.util.StringUtility.stringHasValue;
19
20 import org.mybatis.generator.api.IntrospectedColumn;
21 import org.mybatis.generator.api.dom.xml.Attribute;
22 import org.mybatis.generator.api.dom.xml.TextElement;
23 import org.mybatis.generator.api.dom.xml.XmlElement;
24 import org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities;
25
26
27
28
29
30
31 public class SelectByPrimaryKeyElementGenerator extends
32 AbstractXmlElementGenerator {
33
34 public SelectByPrimaryKeyElementGenerator() {
35 super();
36 }
37
38 @Override
39 public void addElements(XmlElement parentElement) {
40 XmlElement answer = new XmlElement("select");
41
42 answer.addAttribute(new Attribute(
43 "id", introspectedTable.getSelectByPrimaryKeyStatementId()));
44 if (introspectedTable.getRules().generateResultMapWithBLOBs()) {
45 answer.addAttribute(new Attribute("resultMap",
46 introspectedTable.getResultMapWithBLOBsId()));
47 } else {
48 answer.addAttribute(new Attribute("resultMap",
49 introspectedTable.getBaseResultMapId()));
50 }
51
52 String parameterType;
53 if (introspectedTable.getRules().generatePrimaryKeyClass()) {
54 parameterType = introspectedTable.getPrimaryKeyType();
55 } else {
56
57
58 if (introspectedTable.getPrimaryKeyColumns().size() > 1) {
59 parameterType = "map";
60 } else {
61 parameterType = introspectedTable.getPrimaryKeyColumns().get(0)
62 .getFullyQualifiedJavaType().toString();
63 }
64 }
65
66 answer.addAttribute(new Attribute("parameterType",
67 parameterType));
68
69 context.getCommentGenerator().addComment(answer);
70
71 StringBuilder sb = new StringBuilder();
72 sb.append("select ");
73
74 if (stringHasValue(introspectedTable
75 .getSelectByPrimaryKeyQueryId())) {
76 sb.append('\'');
77 sb.append(introspectedTable.getSelectByPrimaryKeyQueryId());
78 sb.append("' as QUERYID,");
79 }
80 answer.addElement(new TextElement(sb.toString()));
81 answer.addElement(getBaseColumnListElement());
82 if (introspectedTable.hasBLOBColumns()) {
83 answer.addElement(new TextElement(","));
84 answer.addElement(getBlobColumnListElement());
85 }
86
87 sb.setLength(0);
88 sb.append("from ");
89 sb.append(introspectedTable
90 .getAliasedFullyQualifiedTableNameAtRuntime());
91 answer.addElement(new TextElement(sb.toString()));
92
93 boolean and = false;
94 for (IntrospectedColumn introspectedColumn : introspectedTable
95 .getPrimaryKeyColumns()) {
96 sb.setLength(0);
97 if (and) {
98 sb.append(" and ");
99 } else {
100 sb.append("where ");
101 and = true;
102 }
103
104 sb.append(MyBatis3FormattingUtilities
105 .getAliasedEscapedColumnName(introspectedColumn));
106 sb.append(" = ");
107 sb.append(MyBatis3FormattingUtilities
108 .getParameterClause(introspectedColumn));
109 answer.addElement(new TextElement(sb.toString()));
110 }
111
112 if (context.getPlugins()
113 .sqlMapSelectByPrimaryKeyElementGenerated(answer,
114 introspectedTable)) {
115 parentElement.addElement(answer);
116 }
117 }
118 }