1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.ibatis.sqlmap.engine.mapping.result.loader;
17
18 import com.ibatis.sqlmap.engine.impl.SqlMapClientImpl;
19 import com.ibatis.sqlmap.engine.type.DomCollectionTypeMarker;
20
21 import java.lang.reflect.Array;
22 import java.sql.SQLException;
23 import java.util.Collection;
24 import java.util.HashSet;
25 import java.util.Iterator;
26 import java.util.List;
27 import java.util.Set;
28
29
30
31
32 public class ResultLoader {
33
34
35
36
37 private ResultLoader() {
38 }
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 public static Object loadResult(SqlMapClientImpl client, String statementName, Object parameterObject,
58 Class targetType) throws SQLException {
59 Object value = null;
60
61 if (client.isLazyLoadingEnabled()) {
62 if (client.isEnhancementEnabled()) {
63 EnhancedLazyResultLoader lazy = new EnhancedLazyResultLoader(client, statementName, parameterObject,
64 targetType);
65 value = lazy.loadResult();
66 } else {
67 LazyResultLoader lazy = new LazyResultLoader(client, statementName, parameterObject, targetType);
68 value = lazy.loadResult();
69 }
70 } else {
71 value = getResult(client, statementName, parameterObject, targetType);
72 }
73
74 return value;
75 }
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94 protected static Object getResult(SqlMapClientImpl client, String statementName, Object parameterObject,
95 Class targetType) throws SQLException {
96 Object value = null;
97 if (DomCollectionTypeMarker.class.isAssignableFrom(targetType)) {
98 value = client.queryForList(statementName, parameterObject);
99 } else if (Set.class.isAssignableFrom(targetType)) {
100 value = new HashSet<>(client.queryForList(statementName, parameterObject));
101 } else if (Collection.class.isAssignableFrom(targetType)) {
102 value = client.queryForList(statementName, parameterObject);
103 } else if (targetType.isArray()) {
104 List list = client.queryForList(statementName, parameterObject);
105 value = listToArray(list, targetType.getComponentType());
106 } else {
107 value = client.queryForObject(statementName, parameterObject);
108 }
109 return value;
110 }
111
112
113
114
115
116
117
118
119
120
121
122 private static Object listToArray(List list, Class type) {
123 Object array = java.lang.reflect.Array.newInstance(type, list.size());
124 if (type.isPrimitive()) {
125 Iterator iter = list.iterator();
126 int index = 0;
127 while (iter.hasNext()) {
128 Array.set(array, index, iter.next());
129 index++;
130 }
131 } else {
132 array = list.toArray((Object[]) array);
133 }
134 return array;
135
136 }
137
138 }