KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jodd > db > orm > DbOrmQuery


1 // Copyright (c) 2003-2007, Jodd Team (jodd.sf.net). All Rights Reserved.
2

3 package jodd.db.orm;
4
5 import jodd.db.DbQuery;
6 import jodd.db.DbQueryMode;
7 import jodd.db.DbSession;
8 import jodd.db.orm.sqlgen.DbSqlGenerator;
9 import jodd.db.orm.mapper.DefaultResultSetMapper;
10 import jodd.db.orm.mapper.ResultSetMapper;
11
12 import java.sql.Connection JavaDoc;
13 import java.util.*;
14
15 /**
16  * A simple ORM extension for {@link DbQuery}.
17  * <p>
18  * ORM extension may map results to objects in two ways:
19  * <ul>
20  * <li><i>auto</i> mode - when result set is mapped to provided types, and</li>
21  * <li><i>mapped</i> mode - requires explicit mapping definitions.</li>
22  * </ul>
23  *
24  * <p>
25  * By default, after invocation of listXxx() methods, query are not closed.
26  *
27  */

28 public class DbOrmQuery extends DbQuery {
29
30     protected DbOrm orm;
31
32     // ---------------------------------------------------------------- default ctors
33

34     public DbOrmQuery(Connection JavaDoc conn, String JavaDoc sqlString) {
35         super(conn, sqlString);
36     }
37
38     public DbOrmQuery(Connection JavaDoc conn, String JavaDoc sqlString, DbQueryMode mode) {
39         super(conn, sqlString, mode);
40     }
41
42     public DbOrmQuery(DbSession session, String JavaDoc sqlString, DbQueryMode mode) {
43         super(session, sqlString, mode);
44     }
45
46     public DbOrmQuery(DbSession session, String JavaDoc sqlString) {
47         super(session, sqlString);
48     }
49
50     public DbOrmQuery(String JavaDoc sqlString, DbQueryMode mode) {
51         super(sqlString, mode);
52     }
53
54     public DbOrmQuery(String JavaDoc sqlString) {
55         super(sqlString);
56     }
57
58     protected void init(Connection JavaDoc conn, String JavaDoc sqlString, DbQueryMode mode) {
59         this.orm = DbOrm.getInstance();
60         super.init(conn, sqlString, mode);
61     }
62
63     // ---------------------------------------------------------------- sqlgen ctors
64

65     protected DbSqlGenerator sqlgen;
66
67     public DbOrmQuery(Connection JavaDoc conn, DbSqlGenerator sqlgen) {
68         super(conn, null);
69         this.sqlgen = sqlgen;
70         init();
71     }
72
73     public DbOrmQuery(Connection JavaDoc conn, DbSqlGenerator sqlgen, DbQueryMode mode) {
74         super(conn, null, mode);
75         this.sqlgen = sqlgen;
76         init();
77     }
78
79     public DbOrmQuery(DbSession session, DbSqlGenerator sqlgen, DbQueryMode mode) {
80         super(session, null, mode);
81         this.sqlgen = sqlgen;
82         init();
83     }
84
85     public DbOrmQuery(DbSession session, DbSqlGenerator sqlgen) {
86         super(session, null);
87         this.sqlgen = sqlgen;
88         init();
89     }
90
91     public DbOrmQuery(DbSqlGenerator sqlgen, DbQueryMode mode) {
92         super(null, mode);
93         this.sqlgen = sqlgen;
94         init();
95     }
96
97     public DbOrmQuery(DbSqlGenerator sqlgen) {
98         super(null);
99         this.sqlgen = sqlgen;
100         init();
101     }
102
103     /**
104      * Initializes class when {@link DbSqlGenerator} is used.
105      */

106     protected void init() {
107         super.init(sqlgen.generateQuery());
108         setParameters(sqlgen.getQueryParameters());
109     }
110
111     // ---------------------------------------------------------------- result set
112

113     /**
114      * Builds new ResultSet mapper. This method acts as a factory.
115      */

116     public ResultSetMapper buildResultSetMapper() {
117         if (sqlgen != null) {
118             return new DefaultResultSetMapper(execute(), sqlgen.getColumnData(), orm);
119         }
120         return new DefaultResultSetMapper(execute(), orm);
121     }
122
123
124     // ---------------------------------------------------------------- iterator
125

126     public Iterator iterateOne(Class JavaDoc type) {
127         return iterateOne(type, false);
128     }
129     public Iterator iterateOneAndClose(Class JavaDoc type) {
130         return iterateOne(type, true);
131     }
132     public Iterator iterateOne() {
133         return iterateOne(null, false);
134     }
135     public Iterator iterateOneAndClose() {
136         return iterateOne(null, true);
137     }
138     protected Iterator iterateOne(Class JavaDoc type, boolean close) {
139         if (type != null) {
140             return new DbListIterator(this, type, close);
141         }
142         return new DbListIterator(this, close, true);
143     }
144
145     public Iterator iterate(Class JavaDoc... types) {
146         return iterate(types, false);
147     }
148     public Iterator iterateAndClose(Class JavaDoc... types) {
149         return iterate(types, true);
150     }
151     public Iterator iterate() {
152         return iterate(null, false);
153     }
154     public Iterator iterateAndClose() {
155         return iterate(null, true);
156     }
157     protected Iterator iterate(Class JavaDoc[] types, boolean close) {
158         if (types != null) {
159             return new DbListIterator(this, types, close);
160         }
161         return new DbListIterator(this, close);
162     }
163
164     // ---------------------------------------------------------------- list
165

166     public <T> List<T> listOne(Class JavaDoc<T> type) {
167         return listOne(type, false);
168     }
169     public <T> List<T> listOneAndClose(Class JavaDoc<T> type) {
170         return listOne(type, true);
171     }
172     @SuppressWarnings JavaDoc({"unchecked"})
173     protected <T> List<T> listOne(Class JavaDoc<T> type, boolean close) {
174         List<T> result = new ArrayList<T>();
175         ResultSetMapper rsm = buildResultSetMapper();
176         Class JavaDoc[] types = new Class JavaDoc[]{type};
177         while (rsm.next()) {
178             result.add((T) rsm.parseOneObject(types));
179         }
180         close(rsm, close);
181         return result;
182     }
183     public List<Object JavaDoc> listOne() {
184         return listOne(null, false);
185     }
186     public List<Object JavaDoc> listOneAndClose() {
187         return listOne(null, true);
188     }
189     protected List<Object JavaDoc> listOne(boolean close) {
190         List<Object JavaDoc> result = new ArrayList<Object JavaDoc>();
191         ResultSetMapper rsm = buildResultSetMapper();
192         while (rsm.next()) {
193             result.add(rsm.parseOneObject());
194         }
195         close(rsm, close);
196         return result;
197     }
198
199     public List<Object JavaDoc[]> list(Class JavaDoc... types) {
200         return list(types, false);
201     }
202     public List<Object JavaDoc[]> listAndClose(Class JavaDoc... types) {
203         return list(types, true);
204     }
205     public List<Object JavaDoc[]> list() {
206         return list(null, false);
207     }
208     public List<Object JavaDoc[]> listAndClose() {
209         return list(null, true);
210     }
211     protected List<Object JavaDoc[]> list(Class JavaDoc[] types, boolean close) {
212         List<Object JavaDoc[]> result = new ArrayList<Object JavaDoc[]>();
213         ResultSetMapper rsm = buildResultSetMapper();
214         if (types != null) {
215             while (rsm.next()) {
216                 result.add(rsm.parseObjects(types));
217             }
218         } else {
219             while (rsm.next()) {
220                 result.add(rsm.parseObjects());
221             }
222         }
223         close(rsm, close);
224         return result;
225     }
226
227
228
229     // ---------------------------------------------------------------- set
230

231     public <T> Set<T> listSetOne(Class JavaDoc<T> type) {
232         return listSetOne(type, false);
233     }
234     public <T> Set<T> listSetOneAndClose(Class JavaDoc<T> type) {
235         return listSetOne(type, true);
236     }
237     @SuppressWarnings JavaDoc({"unchecked"})
238     protected <T> Set<T> listSetOne(Class JavaDoc<T> type, boolean close) {
239         Set<T> result = new LinkedHashSet<T>();
240         ResultSetMapper rsm = buildResultSetMapper();
241         Class JavaDoc[] types = new Class JavaDoc[]{type};
242         while (rsm.next()) {
243             result.add((T) rsm.parseOneObject(types));
244         }
245         close(rsm, close);
246         return result;
247     }
248
249
250     public Set<Object JavaDoc> listSetOne() {
251         return listSetOne(false);
252     }
253     public Set<Object JavaDoc> listSetOneAndClose() {
254         return listSetOne(true);
255     }
256     protected Set<Object JavaDoc> listSetOne(boolean close) {
257         Set<Object JavaDoc> result = new LinkedHashSet<Object JavaDoc>();
258         ResultSetMapper rsm = buildResultSetMapper();
259         while (rsm.next()) {
260             result.add(rsm.parseOneObject());
261         }
262         close(rsm, close);
263         return result;
264     }
265
266
267     public Set<Object JavaDoc[]> listSet(Class JavaDoc... types) {
268         return listSet(types, false);
269     }
270     public Set<Object JavaDoc[]> listSetAndClose(Class JavaDoc... types) {
271         return listSet(types, true);
272     }
273     public Set<Object JavaDoc[]> listSet() {
274         return listSet(null, false);
275     }
276     public Set<Object JavaDoc[]> listSetAndClose() {
277         return listSet(null, false);
278     }
279
280     protected Set<Object JavaDoc[]> listSet(Class JavaDoc[] types, boolean close) {
281         Set<Object JavaDoc[]> result = new LinkedHashSet<Object JavaDoc[]>();
282         ResultSetMapper rsm = buildResultSetMapper();
283         if (types != null) {
284             while (rsm.next()) {
285                 result.add(rsm.parseObjects(types));
286             }
287         } else {
288             while (rsm.next()) {
289                 result.add(rsm.parseObjects());
290             }
291         }
292         close(rsm, close);
293         return result;
294     }
295
296
297     // ---------------------------------------------------------------- find
298

299
300     @SuppressWarnings JavaDoc({"unchecked"})
301     public <T> T findOne(Class JavaDoc<T> type) {
302         return findOne(type, false);
303     }
304     public <T> T findOneAndClose(Class JavaDoc<T> type) {
305         return findOne(type, true);
306     }
307     @SuppressWarnings JavaDoc({"unchecked"})
308     protected <T> T findOne(Class JavaDoc<T> type, boolean close) {
309         setFetchSize(1);
310         ResultSetMapper rsm = buildResultSetMapper();
311         if (rsm.next() == false) {
312             return null;
313         }
314         Class JavaDoc[] types = new Class JavaDoc[]{type};
315         Object JavaDoc result = rsm.parseOneObject(types);
316         close(rsm, close);
317         return (T) result;
318     }
319
320     public Object JavaDoc findOne() {
321         return findOne(false);
322     }
323     public Object JavaDoc findOneAndClose() {
324         return findOne(true);
325     }
326     protected Object JavaDoc findOne(boolean close) {
327         setFetchSize(1);
328         ResultSetMapper rsm = buildResultSetMapper();
329         if (rsm.next() == false) {
330             return null;
331         }
332         Object JavaDoc result = rsm.parseOneObject();
333         close(rsm, close);
334         return result;
335     }
336
337
338
339     public Object JavaDoc[] find(Class JavaDoc... types) {
340         return find(types, false);
341     }
342     public Object JavaDoc[] findAndClose(Class JavaDoc... types) {
343         return find(types, true);
344     }
345
346     public Object JavaDoc[] find() {
347         return find(null, false);
348     }
349
350     public Object JavaDoc[] findAndClose() {
351         return find(null, true);
352     }
353
354     protected Object JavaDoc[] find(Class JavaDoc[] types, boolean close) {
355         setFetchSize(1);
356         ResultSetMapper rsm = buildResultSetMapper();
357         if (rsm.next() == false) {
358             return null;
359         }
360         Object JavaDoc[] result;
361         if (types != null) {
362             result = rsm.parseObjects(types);
363         } else {
364             result = rsm.parseObjects();
365         }
366         close(rsm, close);
367         return result;
368     }
369
370
371     // ---------------------------------------------------------------- util
372

373     /**
374      * Closes results set or whole query.
375      */

376     protected void close(ResultSetMapper rsm, boolean closeQuery) {
377         if (closeQuery == true) {
378             close();
379         } else {
380             close(rsm.getResultSet());
381         }
382     }
383
384
385 }
Popular Tags