1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.generator.codegen.mybatis3.javamapper.elements.annotated;
17
18 import static org.mybatis.generator.api.dom.OutputUtilities.javaIndent;
19 import static org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities.getSelectListPhrase;
20 import static org.mybatis.generator.internal.util.StringUtility.escapeStringForJava;
21
22 import java.util.Iterator;
23
24 import org.mybatis.generator.api.IntrospectedColumn;
25 import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
26 import org.mybatis.generator.api.dom.java.Interface;
27 import org.mybatis.generator.api.dom.java.Method;
28 import org.mybatis.generator.codegen.mybatis3.javamapper.elements.SelectAllMethodGenerator;
29 import org.mybatis.generator.config.PropertyRegistry;
30 import org.mybatis.generator.internal.util.StringUtility;
31
32
33
34
35
36 public class AnnotatedSelectAllMethodGenerator extends
37 SelectAllMethodGenerator {
38
39 public AnnotatedSelectAllMethodGenerator() {
40 super();
41 }
42
43 @Override
44 public void addMapperAnnotations(Interface interfaze, Method method) {
45 interfaze.addImportedType(new FullyQualifiedJavaType("org.apache.ibatis.annotations.Select"));
46
47 StringBuilder sb = new StringBuilder();
48 method.addAnnotation("@Select({");
49 javaIndent(sb, 1);
50 sb.append("\"select\",");
51 method.addAnnotation(sb.toString());
52
53 Iterator<IntrospectedColumn> iter = introspectedTable
54 .getAllColumns().iterator();
55 sb.setLength(0);
56 javaIndent(sb, 1);
57 sb.append('"');
58 boolean hasColumns = false;
59 while (iter.hasNext()) {
60 sb.append(escapeStringForJava(getSelectListPhrase(iter.next())));
61 hasColumns = true;
62
63 if (iter.hasNext()) {
64 sb.append(", ");
65 }
66
67 if (sb.length() > 80) {
68 sb.append("\",");
69 method.addAnnotation(sb.toString());
70
71 sb.setLength(0);
72 javaIndent(sb, 1);
73 sb.append('"');
74 hasColumns = false;
75 }
76 }
77
78 if (hasColumns) {
79 sb.append("\",");
80 method.addAnnotation(sb.toString());
81 }
82
83 String orderByClause = introspectedTable.getTableConfigurationProperty(PropertyRegistry.TABLE_SELECT_ALL_ORDER_BY_CLAUSE);
84 boolean hasOrderBy = StringUtility.stringHasValue(orderByClause);
85
86 sb.setLength(0);
87 javaIndent(sb, 1);
88 sb.append("\"from ");
89 sb.append(escapeStringForJava(introspectedTable
90 .getAliasedFullyQualifiedTableNameAtRuntime()));
91 sb.append('\"');
92 if (hasOrderBy) {
93 sb.append(',');
94 }
95 method.addAnnotation(sb.toString());
96
97 if (hasOrderBy) {
98 sb.setLength(0);
99 javaIndent(sb, 1);
100 sb.append("\"order by ");
101 sb.append(orderByClause);
102 sb.append('\"');
103 method.addAnnotation(sb.toString());
104 }
105
106 method.addAnnotation("})");
107
108 addAnnotatedResults(interfaze, method);
109 }
110
111 private void addAnnotatedResults(Interface interfaze, Method method) {
112 interfaze.addImportedType(new FullyQualifiedJavaType("org.apache.ibatis.type.JdbcType"));
113
114 if (introspectedTable.isConstructorBased()) {
115 interfaze.addImportedType(new FullyQualifiedJavaType("org.apache.ibatis.annotations.Arg"));
116 interfaze.addImportedType(new FullyQualifiedJavaType("org.apache.ibatis.annotations.ConstructorArgs"));
117 method.addAnnotation("@ConstructorArgs({");
118 } else {
119 interfaze.addImportedType(new FullyQualifiedJavaType("org.apache.ibatis.annotations.Result"));
120 interfaze.addImportedType(new FullyQualifiedJavaType("org.apache.ibatis.annotations.Results"));
121 method.addAnnotation("@Results({");
122 }
123
124 StringBuilder sb = new StringBuilder();
125
126 Iterator<IntrospectedColumn> iterPk = introspectedTable.getPrimaryKeyColumns().iterator();
127 Iterator<IntrospectedColumn> iterNonPk = introspectedTable.getNonPrimaryKeyColumns().iterator();
128 while (iterPk.hasNext()) {
129 IntrospectedColumn introspectedColumn = iterPk.next();
130 sb.setLength(0);
131 javaIndent(sb, 1);
132 sb.append(getResultAnnotation(interfaze, introspectedColumn, true,
133 introspectedTable.isConstructorBased()));
134
135 if (iterPk.hasNext() || iterNonPk.hasNext()) {
136 sb.append(',');
137 }
138
139 method.addAnnotation(sb.toString());
140 }
141
142 while (iterNonPk.hasNext()) {
143 IntrospectedColumn introspectedColumn = iterNonPk.next();
144 sb.setLength(0);
145 javaIndent(sb, 1);
146 sb.append(getResultAnnotation(interfaze, introspectedColumn, false,
147 introspectedTable.isConstructorBased()));
148
149 if (iterNonPk.hasNext()) {
150 sb.append(',');
151 }
152
153 method.addAnnotation(sb.toString());
154 }
155
156 method.addAnnotation("})");
157 }
158 }