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 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
25
26
27
28
29
30 public class ExampleWhereClauseElementGenerator extends
31 AbstractXmlElementGenerator {
32
33 public ExampleWhereClauseElementGenerator() {
34 super();
35 }
36
37 @Override
38 public void addElements(XmlElement parentElement) {
39 XmlElement answer = new XmlElement("sql");
40
41 answer.addAttribute(new Attribute(
42 "id", introspectedTable.getExampleWhereClauseId()));
43
44 context.getCommentGenerator().addComment(answer);
45
46 XmlElement outerIterateElement = new XmlElement("iterate");
47 outerIterateElement.addAttribute(new Attribute(
48 "property", "oredCriteria"));
49 outerIterateElement.addAttribute(new Attribute("conjunction", "or"));
50 outerIterateElement.addAttribute(new Attribute("prepend", "where"));
51 outerIterateElement.addAttribute(new Attribute(
52 "removeFirstPrepend", "iterate"));
53 answer.addElement(outerIterateElement);
54
55 XmlElement isEqualElement = new XmlElement("isEqual");
56 isEqualElement.addAttribute(new Attribute(
57 "property", "oredCriteria[].valid"));
58 isEqualElement.addAttribute(new Attribute("compareValue", "true"));
59 outerIterateElement.addElement(isEqualElement);
60
61 isEqualElement.addElement(new TextElement("("));
62
63 XmlElement innerIterateElement = new XmlElement("iterate");
64 innerIterateElement.addAttribute(new Attribute("prepend", "and"));
65 innerIterateElement.addAttribute(new Attribute(
66 "property", "oredCriteria[].criteriaWithoutValue"));
67 innerIterateElement.addAttribute(new Attribute("conjunction", "and"));
68 innerIterateElement.addElement(new TextElement(
69 "$oredCriteria[].criteriaWithoutValue[]$"));
70 isEqualElement.addElement(innerIterateElement);
71
72 innerIterateElement = new XmlElement("iterate");
73 innerIterateElement.addAttribute(new Attribute("prepend", "and"));
74 innerIterateElement.addAttribute(new Attribute(
75 "property", "oredCriteria[].criteriaWithSingleValue"));
76 innerIterateElement.addAttribute(new Attribute("conjunction", "and"));
77 innerIterateElement
78 .addElement(new TextElement(
79 "$oredCriteria[].criteriaWithSingleValue[].condition$ #oredCriteria[].criteriaWithSingleValue[].value#"));
80 isEqualElement.addElement(innerIterateElement);
81
82 innerIterateElement = new XmlElement("iterate");
83 innerIterateElement.addAttribute(new Attribute("prepend", "and"));
84 innerIterateElement.addAttribute(new Attribute(
85 "property", "oredCriteria[].criteriaWithListValue"));
86 innerIterateElement.addAttribute(new Attribute("conjunction", "and"));
87 innerIterateElement.addElement(new TextElement(
88 "$oredCriteria[].criteriaWithListValue[].condition$"));
89 XmlElement innerInnerIterateElement = new XmlElement("iterate");
90 innerInnerIterateElement.addAttribute(new Attribute("property",
91 "oredCriteria[].criteriaWithListValue[].values"));
92 innerInnerIterateElement.addAttribute(new Attribute("open", "("));
93 innerInnerIterateElement.addAttribute(new Attribute("close", ")"));
94 innerInnerIterateElement
95 .addAttribute(new Attribute("conjunction", ","));
96 innerInnerIterateElement.addElement(new TextElement(
97 "#oredCriteria[].criteriaWithListValue[].values[]#"));
98 innerIterateElement.addElement(innerInnerIterateElement);
99 isEqualElement.addElement(innerIterateElement);
100
101 innerIterateElement = new XmlElement("iterate");
102 innerIterateElement.addAttribute(new Attribute("prepend", "and"));
103 innerIterateElement.addAttribute(new Attribute(
104 "property", "oredCriteria[].criteriaWithBetweenValue"));
105 innerIterateElement.addAttribute(new Attribute("conjunction", "and"));
106 innerIterateElement.addElement(new TextElement(
107 "$oredCriteria[].criteriaWithBetweenValue[].condition$"));
108 innerIterateElement.addElement(new TextElement(
109 "#oredCriteria[].criteriaWithBetweenValue[].values[0]# and"));
110 innerIterateElement.addElement(new TextElement(
111 "#oredCriteria[].criteriaWithBetweenValue[].values[1]#"));
112 isEqualElement.addElement(innerIterateElement);
113
114
115
116
117 for (IntrospectedColumn introspectedColumn : introspectedTable
118 .getNonBLOBColumns()) {
119 if (stringHasValue(introspectedColumn
120 .getTypeHandler())) {
121
122
123 StringBuilder sb1 = new StringBuilder();
124 StringBuilder sb2 = new StringBuilder();
125 innerIterateElement = new XmlElement("iterate");
126 innerIterateElement
127 .addAttribute(new Attribute("prepend", "and"));
128
129 sb1.append("oredCriteria[].");
130 sb1.append(introspectedColumn.getJavaProperty());
131 sb1.append("CriteriaWithSingleValue");
132
133 innerIterateElement.addAttribute(new Attribute(
134 "property", sb1.toString()));
135 innerIterateElement.addAttribute(new Attribute(
136 "conjunction", "and"));
137
138 sb2.append(sb1);
139
140 sb1.insert(0, '$');
141 sb1.append("[].condition$ ");
142
143 sb2.insert(0, '#');
144 sb2.append("[].value,handler=");
145 sb2.append(introspectedColumn.getTypeHandler());
146 sb2.append('#');
147
148 sb1.append(sb2);
149
150 innerIterateElement.addElement(new TextElement(sb1.toString()));
151 isEqualElement.addElement(innerIterateElement);
152
153 sb1.setLength(0);
154 sb2.setLength(0);
155 sb1.append("oredCriteria[].");
156 sb1.append(introspectedColumn.getJavaProperty());
157 sb1.append("CriteriaWithListValue");
158
159 innerIterateElement = new XmlElement("iterate");
160 innerIterateElement
161 .addAttribute(new Attribute("prepend", "and"));
162 innerIterateElement.addAttribute(new Attribute(
163 "property", sb1.toString()));
164 innerIterateElement.addAttribute(new Attribute(
165 "conjunction", "and"));
166
167 sb2.append('$');
168 sb2.append(sb1);
169 sb2.append("[].condition$");
170
171 innerIterateElement.addElement(new TextElement(sb2.toString()));
172
173 sb2.setLength(0);
174 sb2.append(sb1);
175 sb2.append("[].values");
176
177 innerInnerIterateElement = new XmlElement("iterate");
178 innerInnerIterateElement.addAttribute(new Attribute("property",
179 sb2.toString()));
180 innerInnerIterateElement
181 .addAttribute(new Attribute("open", "("));
182 innerInnerIterateElement.addAttribute(new Attribute(
183 "close", ")"));
184 innerInnerIterateElement.addAttribute(new Attribute(
185 "conjunction", ","));
186
187 sb2.setLength(0);
188 sb2.append('#');
189 sb2.append(sb1);
190 sb2.append("[].values[],handler=");
191 sb2.append(introspectedColumn.getTypeHandler());
192 sb2.append('#');
193
194 innerInnerIterateElement.addElement(new TextElement(sb2
195 .toString()));
196 innerIterateElement.addElement(innerInnerIterateElement);
197 isEqualElement.addElement(innerIterateElement);
198
199 sb1.setLength(0);
200 sb2.setLength(0);
201 sb1.append("oredCriteria[].");
202 sb1.append(introspectedColumn.getJavaProperty());
203 sb1.append("CriteriaWithBetweenValue");
204
205 innerIterateElement = new XmlElement("iterate");
206 innerIterateElement
207 .addAttribute(new Attribute("prepend", "and"));
208 innerIterateElement.addAttribute(new Attribute(
209 "property", sb1.toString()));
210 innerIterateElement.addAttribute(new Attribute(
211 "conjunction", "and"));
212
213 sb2.append('$');
214 sb2.append(sb1);
215 sb2.append("[].condition$");
216
217 innerIterateElement.addElement(new TextElement(sb2.toString()));
218
219 sb2.setLength(0);
220 sb2.append(sb1);
221
222 sb1.insert(0, '#');
223 sb1.append("[].values[0],handler=");
224 sb1.append(introspectedColumn.getTypeHandler());
225 sb1.append("# and");
226
227 sb2.insert(0, '#');
228 sb2.append("[].values[1],handler=");
229 sb2.append(introspectedColumn.getTypeHandler());
230 sb2.append('#');
231
232 innerIterateElement.addElement(new TextElement(sb1.toString()));
233 innerIterateElement.addElement(new TextElement(sb2.toString()));
234 isEqualElement.addElement(innerIterateElement);
235 }
236 }
237
238 isEqualElement.addElement(new TextElement(")"));
239
240 if (context.getPlugins()
241 .sqlMapExampleWhereClauseElementGenerated(answer,
242 introspectedTable)) {
243 parentElement.addElement(answer);
244 }
245 }
246 }