1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.generator.codegen.ibatis2.sqlmap.elements;
17
18 import java.util.ArrayList;
19 import java.util.Iterator;
20 import java.util.List;
21
22 import org.mybatis.generator.api.IntrospectedColumn;
23 import org.mybatis.generator.api.dom.OutputUtilities;
24 import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
25 import org.mybatis.generator.api.dom.xml.Attribute;
26 import org.mybatis.generator.api.dom.xml.TextElement;
27 import org.mybatis.generator.api.dom.xml.XmlElement;
28 import org.mybatis.generator.codegen.ibatis2.Ibatis2FormattingUtilities;
29 import org.mybatis.generator.config.GeneratedKey;
30
31
32
33
34
35
36 public class InsertElementGenerator extends AbstractXmlElementGenerator {
37
38 public InsertElementGenerator() {
39 super();
40 }
41
42 @Override
43 public void addElements(XmlElement parentElement) {
44 XmlElement answer = new XmlElement("insert");
45
46 answer.addAttribute(new Attribute(
47 "id", introspectedTable.getInsertStatementId()));
48
49 FullyQualifiedJavaType parameterType = introspectedTable.getRules()
50 .calculateAllFieldsClass();
51
52 answer.addAttribute(new Attribute("parameterClass",
53 parameterType.getFullyQualifiedName()));
54
55 context.getCommentGenerator().addComment(answer);
56
57 GeneratedKey gk = introspectedTable.getGeneratedKey();
58
59 if (gk != null && gk.isPlacedBeforeInsertInIbatis2()) {
60 IntrospectedColumn introspectedColumn = introspectedTable
61 .getColumn(gk.getColumn());
62
63
64 if (introspectedColumn != null) {
65
66 answer.addElement(getSelectKey(introspectedColumn, gk));
67 }
68 }
69
70 StringBuilder insertClause = new StringBuilder();
71 StringBuilder valuesClause = new StringBuilder();
72
73 insertClause.append("insert into ");
74 insertClause.append(introspectedTable
75 .getFullyQualifiedTableNameAtRuntime());
76 insertClause.append(" (");
77
78 valuesClause.append("values (");
79
80 List<String> valuesClauses = new ArrayList<String>();
81 Iterator<IntrospectedColumn> iter = introspectedTable.getAllColumns()
82 .iterator();
83 while (iter.hasNext()) {
84 IntrospectedColumn introspectedColumn = iter.next();
85 if (introspectedColumn.isIdentity()) {
86
87 continue;
88 }
89
90 insertClause.append(Ibatis2FormattingUtilities
91 .getEscapedColumnName(introspectedColumn));
92 valuesClause.append(Ibatis2FormattingUtilities
93 .getParameterClause(introspectedColumn));
94 if (iter.hasNext()) {
95 insertClause.append(", ");
96 valuesClause.append(", ");
97 }
98
99 if (valuesClause.length() > 80) {
100 answer.addElement(new TextElement(insertClause.toString()));
101 insertClause.setLength(0);
102 OutputUtilities.xmlIndent(insertClause, 1);
103
104 valuesClauses.add(valuesClause.toString());
105 valuesClause.setLength(0);
106 OutputUtilities.xmlIndent(valuesClause, 1);
107 }
108 }
109
110 insertClause.append(')');
111 answer.addElement(new TextElement(insertClause.toString()));
112
113 valuesClause.append(')');
114 valuesClauses.add(valuesClause.toString());
115
116 for (String clause : valuesClauses) {
117 answer.addElement(new TextElement(clause));
118 }
119
120 if (gk != null && !gk.isPlacedBeforeInsertInIbatis2()) {
121 IntrospectedColumn introspectedColumn = introspectedTable
122 .getColumn(gk.getColumn());
123
124
125 if (introspectedColumn != null) {
126
127 answer.addElement(getSelectKey(introspectedColumn, gk));
128 }
129 }
130
131 if (context.getPlugins().sqlMapInsertElementGenerated(answer,
132 introspectedTable)) {
133 parentElement.addElement(answer);
134 }
135 }
136 }