1
1
package com .github .abel533 .sql ;
2
2
3
3
import org .apache .ibatis .builder .StaticSqlSource ;
4
+ import org .apache .ibatis .exceptions .TooManyResultsException ;
4
5
import org .apache .ibatis .mapping .*;
5
6
import org .apache .ibatis .scripting .LanguageDriver ;
6
7
import org .apache .ibatis .session .Configuration ;
18
19
*/
19
20
public class SqlMapper {
20
21
private final MSUtils msUtils ;
21
- private SqlSession sqlSession ;
22
+ private final SqlSession sqlSession ;
22
23
24
+ /**
25
+ * 构造方法,默认缓存MappedStatement
26
+ *
27
+ * @param sqlSession
28
+ */
23
29
public SqlMapper (SqlSession sqlSession ) {
24
30
this .sqlSession = sqlSession ;
25
31
this .msUtils = new MSUtils (sqlSession .getConfiguration ());
26
32
}
27
33
28
- public List <Map <String , Object >> select (String sql ) {
34
+ /**
35
+ * 获取List中最多只有一个的数据
36
+ *
37
+ * @param list List结果
38
+ * @param <T> 泛型类型
39
+ * @return
40
+ */
41
+ private <T > T getOne (List <T > list ) {
42
+ if (list .size () == 1 ) {
43
+ return list .get (0 );
44
+ } else if (list .size () > 1 ) {
45
+ throw new TooManyResultsException ("Expected one result (or null) to be returned by selectOne(), but found: " + list .size ());
46
+ } else {
47
+ return null ;
48
+ }
49
+ }
50
+
51
+ /**
52
+ * 查询返回一个结果,多个结果时抛出异常
53
+ *
54
+ * @param sql 执行的sql
55
+ * @return
56
+ */
57
+ public Map <String , Object > selectOne (String sql ) {
58
+ List <Map <String , Object >> list = selectList (sql );
59
+ return getOne (list );
60
+ }
61
+
62
+ /**
63
+ * 查询返回一个结果,多个结果时抛出异常
64
+ *
65
+ * @param sql 执行的sql
66
+ * @param value 参数
67
+ * @return
68
+ */
69
+ public Map <String , Object > selectOne (String sql , Object value ) {
70
+ List <Map <String , Object >> list = selectList (sql , value );
71
+ return getOne (list );
72
+ }
73
+
74
+ /**
75
+ * 查询返回一个结果,多个结果时抛出异常
76
+ *
77
+ * @param sql 执行的sql
78
+ * @param resultType 返回的结果类型
79
+ * @param <T> 泛型类型
80
+ * @return
81
+ */
82
+ public <T > T selectOne (String sql , Class <T > resultType ) {
83
+ List <T > list = selectList (sql , resultType );
84
+ return getOne (list );
85
+ }
86
+
87
+ /**
88
+ * 查询返回一个结果,多个结果时抛出异常
89
+ *
90
+ * @param sql 执行的sql
91
+ * @param value 参数
92
+ * @param resultType 返回的结果类型
93
+ * @param <T> 泛型类型
94
+ * @return
95
+ */
96
+ public <T > T selectOne (String sql , Object value , Class <T > resultType ) {
97
+ List <T > list = selectList (sql , value , resultType );
98
+ return getOne (list );
99
+ }
100
+
101
+ /**
102
+ * 查询返回List<Map<String, Object>>
103
+ *
104
+ * @param sql 执行的sql
105
+ * @return
106
+ */
107
+ public List <Map <String , Object >> selectList (String sql ) {
29
108
String msId = msUtils .select (sql );
30
109
return sqlSession .selectList (msId );
31
110
}
32
111
33
- public List <Map <String , Object >> select (String sql , Object value ) {
112
+ /**
113
+ * 查询返回List<Map<String, Object>>
114
+ *
115
+ * @param sql 执行的sql
116
+ * @param value 参数
117
+ * @return
118
+ */
119
+ public List <Map <String , Object >> selectList (String sql , Object value ) {
34
120
Class <?> parameterType = value != null ? value .getClass () : null ;
35
121
String msId = msUtils .selectDynamic (sql , parameterType );
36
122
return sqlSession .selectList (msId , value );
37
123
}
38
124
39
- public <T > List <T > select (String sql , Class <T > resultType ) {
125
+ /**
126
+ * 查询返回指定的结果类型
127
+ *
128
+ * @param sql 执行的sql
129
+ * @param resultType 返回的结果类型
130
+ * @param <T> 泛型类型
131
+ * @return
132
+ */
133
+ public <T > List <T > selectList (String sql , Class <T > resultType ) {
40
134
String msId ;
41
135
if (resultType == null ) {
42
136
msId = msUtils .select (sql );
@@ -46,7 +140,16 @@ public <T> List<T> select(String sql, Class<T> resultType) {
46
140
return sqlSession .selectList (msId );
47
141
}
48
142
49
- public <T > List <T > select (String sql , Object value , Class <T > resultType ) {
143
+ /**
144
+ * 查询返回指定的结果类型
145
+ *
146
+ * @param sql 执行的sql
147
+ * @param value 参数
148
+ * @param resultType 返回的结果类型
149
+ * @param <T> 泛型类型
150
+ * @return
151
+ */
152
+ public <T > List <T > selectList (String sql , Object value , Class <T > resultType ) {
50
153
String msId ;
51
154
Class <?> parameterType = value != null ? value .getClass () : null ;
52
155
if (resultType == null ) {
@@ -57,37 +160,76 @@ public <T> List<T> select(String sql, Object value, Class<T> resultType) {
57
160
return sqlSession .selectList (msId , value );
58
161
}
59
162
163
+ /**
164
+ * 插入数据
165
+ *
166
+ * @param sql 执行的sql
167
+ * @return
168
+ */
60
169
public int insert (String sql ) {
61
170
String msId = msUtils .insert (sql );
62
171
return sqlSession .insert (msId );
63
172
}
64
173
174
+ /**
175
+ * 插入数据
176
+ *
177
+ * @param sql 执行的sql
178
+ * @param value 参数
179
+ * @return
180
+ */
65
181
public int insert (String sql , Object value ) {
66
182
Class <?> parameterType = value != null ? value .getClass () : null ;
67
183
String msId = msUtils .insertDynamic (sql , parameterType );
68
184
return sqlSession .insert (msId , value );
69
185
}
70
186
187
+ /**
188
+ * 更新数据
189
+ *
190
+ * @param sql 执行的sql
191
+ * @return
192
+ */
71
193
public int update (String sql ) {
72
194
String msId = msUtils .update (sql );
73
- return sqlSession .insert (msId );
195
+ return sqlSession .update (msId );
74
196
}
75
197
198
+ /**
199
+ * 更新数据
200
+ *
201
+ * @param sql 执行的sql
202
+ * @param value 参数
203
+ * @return
204
+ */
76
205
public int update (String sql , Object value ) {
77
206
Class <?> parameterType = value != null ? value .getClass () : null ;
78
207
String msId = msUtils .updateDynamic (sql , parameterType );
79
- return sqlSession .insert (msId , value );
208
+ return sqlSession .update (msId , value );
80
209
}
81
210
211
+ /**
212
+ * 删除数据
213
+ *
214
+ * @param sql 执行的sql
215
+ * @return
216
+ */
82
217
public int delete (String sql ) {
83
- String msId = msUtils .insert (sql );
218
+ String msId = msUtils .delete (sql );
84
219
return sqlSession .delete (msId );
85
220
}
86
221
222
+ /**
223
+ * 删除数据
224
+ *
225
+ * @param sql 执行的sql
226
+ * @param value 参数
227
+ * @return
228
+ */
87
229
public int delete (String sql , Object value ) {
88
230
Class <?> parameterType = value != null ? value .getClass () : null ;
89
231
String msId = msUtils .deleteDynamic (sql , parameterType );
90
- return sqlSession .insert (msId , value );
232
+ return sqlSession .delete (msId , value );
91
233
}
92
234
93
235
private class MSUtils {
@@ -102,8 +244,8 @@ private MSUtils(Configuration configuration) {
102
244
/**
103
245
* 创建MSID
104
246
*
105
- * @param sql
106
- * @param sqlCommandType
247
+ * @param sql 执行的sql
248
+ * @param sql 执行的sqlCommandType
107
249
* @return
108
250
*/
109
251
private String newMsId (String sql , SqlCommandType sqlCommandType ) {
@@ -126,8 +268,8 @@ private boolean hasMappedStatement(String msId) {
126
268
* 创建一个查询的MS
127
269
*
128
270
* @param msId
129
- * @param sqlSource
130
- * @param resultType
271
+ * @param sqlSource 执行的sqlSource
272
+ * @param resultType 返回的结果类型
131
273
*/
132
274
private void newSelectMappedStatement (String msId , SqlSource sqlSource , final Class <?> resultType ) {
133
275
MappedStatement ms = new MappedStatement .Builder (configuration , msId , sqlSource , SqlCommandType .SELECT )
@@ -145,8 +287,8 @@ private void newSelectMappedStatement(String msId, SqlSource sqlSource, final Cl
145
287
* 创建一个简单的MS
146
288
*
147
289
* @param msId
148
- * @param sqlSource
149
- * @param sqlCommandType
290
+ * @param sqlSource 执行的sqlSource
291
+ * @param sqlCommandType 执行的sqlCommandType
150
292
*/
151
293
private void newUpdateMappedStatement (String msId , SqlSource sqlSource , SqlCommandType sqlCommandType ) {
152
294
MappedStatement ms = new MappedStatement .Builder (configuration , msId , sqlSource , sqlCommandType )
0 commit comments