1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.generator.codegen.ibatis2.dao.elements;
17
18 import java.util.Set;
19 import java.util.TreeSet;
20
21 import org.mybatis.generator.api.IntrospectedColumn;
22 import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
23 import org.mybatis.generator.api.dom.java.Interface;
24 import org.mybatis.generator.api.dom.java.JavaVisibility;
25 import org.mybatis.generator.api.dom.java.Method;
26 import org.mybatis.generator.api.dom.java.Parameter;
27 import org.mybatis.generator.api.dom.java.PrimitiveTypeWrapper;
28 import org.mybatis.generator.api.dom.java.TopLevelClass;
29
30
31
32
33
34
35 public class InsertSelectiveMethodGenerator extends AbstractDAOElementGenerator {
36
37 public InsertSelectiveMethodGenerator() {
38 super();
39 }
40
41 @Override
42 public void addImplementationElements(TopLevelClass topLevelClass) {
43 Set<FullyQualifiedJavaType> importedTypes = new TreeSet<FullyQualifiedJavaType>();
44 Method method = getMethodShell(importedTypes);
45
46 FullyQualifiedJavaType returnType = method.getReturnType();
47 StringBuilder sb = new StringBuilder();
48
49 if (returnType != null) {
50 sb.append("Object newKey = ");
51 }
52
53 sb.append(daoTemplate.getInsertMethod(introspectedTable
54 .getIbatis2SqlMapNamespace(), introspectedTable
55 .getInsertSelectiveStatementId(), "record"));
56 method.addBodyLine(sb.toString());
57
58 if (returnType != null) {
59 if ("Object".equals(returnType.getShortName())) {
60
61 method.addBodyLine("return newKey;");
62 } else {
63 sb.setLength(0);
64
65 if (returnType.isPrimitive()) {
66 PrimitiveTypeWrapper ptw = returnType
67 .getPrimitiveTypeWrapper();
68 sb.append("return ((");
69 sb.append(ptw.getShortName());
70 sb.append(") newKey");
71 sb.append(").");
72 sb.append(ptw.getToPrimitiveMethod());
73 sb.append(';');
74 } else {
75 sb.append("return (");
76 sb.append(returnType.getShortName());
77 sb.append(") newKey;");
78 }
79
80 method.addBodyLine(sb.toString());
81 }
82 }
83
84 if (context.getPlugins().clientInsertSelectiveMethodGenerated(
85 method, topLevelClass, introspectedTable)) {
86 topLevelClass.addImportedTypes(importedTypes);
87 topLevelClass.addMethod(method);
88 }
89 }
90
91 @Override
92 public void addInterfaceElements(Interface interfaze) {
93 Set<FullyQualifiedJavaType> importedTypes = new TreeSet<FullyQualifiedJavaType>();
94 Method method = getMethodShell(importedTypes);
95
96 if (context.getPlugins().clientInsertSelectiveMethodGenerated(
97 method, interfaze, introspectedTable)) {
98 interfaze.addImportedTypes(importedTypes);
99 interfaze.addMethod(method);
100 }
101 }
102
103 private Method getMethodShell(Set<FullyQualifiedJavaType> importedTypes) {
104 Method method = new Method();
105
106 FullyQualifiedJavaType returnType;
107 if (introspectedTable.getGeneratedKey() != null) {
108 IntrospectedColumn introspectedColumn = introspectedTable
109 .getColumn(introspectedTable.getGeneratedKey().getColumn());
110 if (introspectedColumn == null) {
111
112
113
114 returnType = null;
115 } else {
116 returnType = introspectedColumn.getFullyQualifiedJavaType();
117 importedTypes.add(returnType);
118 }
119 } else {
120 returnType = null;
121 }
122 method.setReturnType(returnType);
123 method.setVisibility(JavaVisibility.PUBLIC);
124 method.setName(getDAOMethodNameCalculator()
125 .getInsertSelectiveMethodName(introspectedTable));
126
127 FullyQualifiedJavaType parameterType = introspectedTable.getRules()
128 .calculateAllFieldsClass();
129
130 importedTypes.add(parameterType);
131 method.addParameter(new Parameter(parameterType, "record"));
132
133 for (FullyQualifiedJavaType fqjt : daoTemplate.getCheckedExceptions()) {
134 method.addException(fqjt);
135 importedTypes.add(fqjt);
136 }
137
138 context.getCommentGenerator().addGeneralMethodComment(method,
139 introspectedTable);
140
141 return method;
142 }
143 }