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.XmlElement;
23 import org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities;
24
25
26
27
28
29
30 public class ResultMapWithBLOBsElementGenerator extends
31 AbstractXmlElementGenerator {
32
33 public ResultMapWithBLOBsElementGenerator() {
34 super();
35 }
36
37 @Override
38 public void addElements(XmlElement parentElement) {
39 XmlElement answer = new XmlElement("resultMap");
40
41 answer.addAttribute(new Attribute("id",
42 introspectedTable.getResultMapWithBLOBsId()));
43
44 String returnType;
45 if (introspectedTable.getRules().generateRecordWithBLOBsClass()) {
46 returnType = introspectedTable.getRecordWithBLOBsType();
47 } else {
48
49
50 returnType = introspectedTable.getBaseRecordType();
51 }
52
53 answer.addAttribute(new Attribute("type",
54 returnType));
55
56 if (!introspectedTable.isConstructorBased()) {
57 answer.addAttribute(new Attribute("extends",
58 introspectedTable.getBaseResultMapId()));
59 }
60
61 context.getCommentGenerator().addComment(answer);
62
63 if (introspectedTable.isConstructorBased()) {
64 addResultMapConstructorElements(answer);
65 } else {
66 addResultMapElements(answer);
67 }
68
69 if (context.getPlugins()
70 .sqlMapResultMapWithBLOBsElementGenerated(answer,
71 introspectedTable)) {
72 parentElement.addElement(answer);
73 }
74 }
75
76 private void addResultMapElements(XmlElement answer) {
77 for (IntrospectedColumn introspectedColumn : introspectedTable
78 .getBLOBColumns()) {
79 XmlElement resultElement = new XmlElement("result");
80
81 resultElement
82 .addAttribute(new Attribute(
83 "column", MyBatis3FormattingUtilities.getRenamedColumnNameForResultMap(introspectedColumn)));
84 resultElement.addAttribute(new Attribute(
85 "property", introspectedColumn.getJavaProperty()));
86 resultElement.addAttribute(new Attribute(
87 "jdbcType", introspectedColumn.getJdbcTypeName()));
88
89 if (stringHasValue(introspectedColumn
90 .getTypeHandler())) {
91 resultElement.addAttribute(new Attribute(
92 "typeHandler", introspectedColumn.getTypeHandler()));
93 }
94
95 answer.addElement(resultElement);
96 }
97 }
98
99 private void addResultMapConstructorElements(XmlElement answer) {
100 XmlElement constructor = new XmlElement("constructor");
101
102 for (IntrospectedColumn introspectedColumn : introspectedTable
103 .getPrimaryKeyColumns()) {
104 XmlElement resultElement = new XmlElement("idArg");
105
106 resultElement
107 .addAttribute(new Attribute(
108 "column", MyBatis3FormattingUtilities.getRenamedColumnNameForResultMap(introspectedColumn)));
109 resultElement.addAttribute(new Attribute(
110 "jdbcType", introspectedColumn.getJdbcTypeName()));
111 resultElement.addAttribute(new Attribute("javaType",
112 introspectedColumn.getFullyQualifiedJavaType().getFullyQualifiedName()));
113
114 if (stringHasValue(introspectedColumn
115 .getTypeHandler())) {
116 resultElement.addAttribute(new Attribute(
117 "typeHandler", introspectedColumn.getTypeHandler()));
118 }
119
120 constructor.addElement(resultElement);
121 }
122
123 for (IntrospectedColumn introspectedColumn : introspectedTable
124 .getNonPrimaryKeyColumns()) {
125 XmlElement resultElement = new XmlElement("arg");
126
127 resultElement
128 .addAttribute(new Attribute(
129 "column", MyBatis3FormattingUtilities.getRenamedColumnNameForResultMap(introspectedColumn)));
130 resultElement.addAttribute(new Attribute(
131 "jdbcType", introspectedColumn.getJdbcTypeName()));
132
133 if (introspectedColumn.getFullyQualifiedJavaType().isPrimitive()) {
134
135 StringBuilder sb = new StringBuilder();
136 sb.append('_');
137 sb.append(introspectedColumn.getFullyQualifiedJavaType().getShortName());
138 resultElement.addAttribute(new Attribute("javaType",
139 sb.toString()));
140
141 } else if ("byte[]".equals(introspectedColumn.getFullyQualifiedJavaType()
142 .getFullyQualifiedName())) {
143
144 resultElement.addAttribute(new Attribute("javaType",
145 "_byte[]"));
146 } else {
147 resultElement.addAttribute(new Attribute("javaType",
148 introspectedColumn.getFullyQualifiedJavaType().getFullyQualifiedName()));
149 }
150
151 if (stringHasValue(introspectedColumn
152 .getTypeHandler())) {
153 resultElement.addAttribute(new Attribute(
154 "typeHandler", introspectedColumn.getTypeHandler()));
155 }
156
157 constructor.addElement(resultElement);
158 }
159
160 answer.addElement(constructor);
161 }
162 }