2222
2323/**
2424 * 仿照Spring JdbcTemplate实现nutz的SqlTemplate,方便sql的调用
25- *
25+ *
2626 * @author hzl7652(hzl7652@sina.com)
2727 */
2828public class SqlTemplate {
@@ -45,12 +45,12 @@ public Dao dao() {
4545
4646 /**
4747 * 执行一个SQL更新操作(如插入,更新或删除语句)。
48- *
48+ *
4949 * @param sql
5050 * 包含变量占位符的SQL
5151 * @param params
5252 * 参数map,无参数时,可为null
53- *
53+ *
5454 * @return SQL 语句所影响的行数
5555 */
5656 public int update (String sql , Map <String , Object > params ) {
@@ -59,14 +59,14 @@ public int update(String sql, Map<String, Object> params) {
5959
6060 /**
6161 * 执行一个SQL更新操作(如插入,更新或删除语句)。
62- *
62+ *
6363 * @param sql
6464 * 包含变量占位符的SQL
6565 * @param vars
6666 * 变量map,无参数时,可为null
6767 * @param params
6868 * 参数map,无参数时,可为null
69- *
69+ *
7070 * @return SQL 语句所影响的行数
7171 */
7272 public int update (String sql , Map <String , Object > vars , Map <String , Object > params ) {
@@ -77,12 +77,12 @@ public int update(String sql, Map<String, Object> vars, Map<String, Object> para
7777
7878 /**
7979 * 执行SQL批量更新操作(如插入,更新或删除语句)。
80- *
80+ *
8181 * @param sql
8282 * 包含变量占位符的SQL
8383 * @param batchValues
8484 * 批量更新参数集合
85- *
85+ *
8686 * @return SQL 语句所影响的行数
8787 */
8888 public int batchUpdate (String sql , List <Map <String , Object >> batchValues ) {
@@ -91,14 +91,14 @@ public int batchUpdate(String sql, List<Map<String, Object>> batchValues) {
9191
9292 /**
9393 * 执行SQL批量更新操作(如插入,更新或删除语句)。
94- *
94+ *
9595 * @param sql
9696 * 包含变量占位符的SQL
9797 * @param vars
9898 * 变量map,无参数时,可为null
9999 * @param batchValues
100100 * 批量更新参数集合
101- *
101+ *
102102 * @return SQL 语句所影响的行数
103103 */
104104 public int batchUpdate (String sql ,
@@ -124,12 +124,12 @@ public int batchUpdate(String sql,
124124 /**
125125 * 执行一个SQL查询操作,结果为一个int形数值。
126126 * <p>
127- *
127+ *
128128 * @param sql
129129 * 包含变量占位符的SQL
130130 * @param params
131131 * 参数map,无参数时,可为null
132- *
132+ *
133133 * @return int数值,当查询为null时返回0
134134 */
135135 public int queryForInt (String sql , Map <String , Object > params ) {
@@ -138,14 +138,14 @@ public int queryForInt(String sql, Map<String, Object> params) {
138138
139139 /**
140140 * 执行一个SQL查询操作,结果为一个int形数值。
141- *
141+ *
142142 * @param sql
143143 * 包含变量占位符的SQL
144144 * @param vars
145145 * 变量map,无参数时,可为null
146146 * @param params
147147 * 参数map,无参数时,可为null
148- *
148+ *
149149 * @return int数值,当查询为null时返回0
150150 */
151151 public int queryForInt (String sql , Map <String , Object > vars , Map <String , Object > params ) {
@@ -157,12 +157,12 @@ public int queryForInt(String sql, Map<String, Object> vars, Map<String, Object>
157157
158158 /**
159159 * 执行一个SQL查询操作,结果为一个long形数值。
160- *
160+ *
161161 * @param sql
162162 * 包含变量占位符的SQL
163163 * @param params
164164 * 参数map,无参数时,可为null
165- *
165+ *
166166 * @return long数值,当查询为null时返回0
167167 */
168168 public long queryForLong (String sql , Map <String , Object > params ) {
@@ -171,14 +171,14 @@ public long queryForLong(String sql, Map<String, Object> params) {
171171
172172 /**
173173 * 执行一个SQL查询操作,结果为一个long形数值。
174- *
174+ *
175175 * @param sql
176176 * 包含变量占位符的SQL
177177 * @param vars
178178 * 变量map,无参数时,可为null
179179 * @param params
180180 * 参数map,无参数时,可为null
181- *
181+ *
182182 * @return long数值,当查询为null时返回0
183183 */
184184 public long queryForLong (String sql , Map <String , Object > vars , Map <String , Object > params ) {
@@ -191,14 +191,14 @@ public long queryForLong(String sql, Map<String, Object> vars, Map<String, Objec
191191
192192 /**
193193 * 执行一个SQL查询操作,结果为给定对象类型的对象,适用于明确SQL查询结果的类型。
194- *
194+ *
195195 * @param sql
196196 * 包含变量占位符的SQL
197197 * @param params
198198 * 参数map 无参数时,可为null
199199 * @param classOfT
200200 * 对象类型,SQL查询结果所对应的类型,如Date.class等
201- *
201+ *
202202 * @return 对象,无查询结果时返回null
203203 */
204204 public <T > T queryForObject (String sql , Map <String , Object > params , Class <T > classOfT ) {
@@ -207,7 +207,7 @@ public <T> T queryForObject(String sql, Map<String, Object> params, Class<T> cla
207207
208208 /**
209209 * 执行一个SQL查询操作,结果为给定对象类型的对象,适用于明确SQL查询结果的类型。
210- *
210+ *
211211 * @param sql
212212 * 包含变量占位符的SQL
213213 * @param vars
@@ -216,7 +216,7 @@ public <T> T queryForObject(String sql, Map<String, Object> params, Class<T> cla
216216 * 参数map,无参数时,可为null
217217 * @param classOfT
218218 * 对象类型,SQL查询结果所对应的类型,如Date.class等
219- *
219+ *
220220 * @return 对象,无查询结果时返回null
221221 */
222222 public <T > T queryForObject (String sql ,
@@ -238,14 +238,14 @@ public Object invoke(Connection conn, ResultSet rs, Sql sql) throws SQLException
238238
239239 /**
240240 * 执行一个SQL查询操作,结果为给定实体的对象。
241- *
241+ *
242242 * @param sql
243243 * 包含变量占位符的SQL
244244 * @param params
245245 * 参数map,无参数时,可为null
246246 * @param entity
247247 * 实体类型,无参数时,可为null
248- *
248+ *
249249 * @return 对象,无查询结果时返回null
250250 */
251251 public <T > T queryForObject (String sql , Map <String , Object > params , Entity <T > entity ) {
@@ -254,7 +254,7 @@ public <T> T queryForObject(String sql, Map<String, Object> params, Entity<T> en
254254
255255 /**
256256 * 执行一个SQL查询操作,结果为给定实体的对象。
257- *
257+ *
258258 * @param sql
259259 * 包含变量占位符的SQL
260260 * @param vars
@@ -263,7 +263,7 @@ public <T> T queryForObject(String sql, Map<String, Object> params, Entity<T> en
263263 * 参数map,无参数时,可为null
264264 * @param entity
265265 * 实体类型
266- *
266+ *
267267 * @return 对象,无查询结果时返回null
268268 */
269269 public <T > T queryForObject (String sql ,
@@ -281,12 +281,12 @@ public <T> T queryForObject(String sql,
281281
282282 /**
283283 * 执行一个SQL查询操作,结果为Record的对象。
284- *
284+ *
285285 * @param sql
286286 * 包含变量占位符的SQL
287287 * @param params
288288 * 参数map,无参数时,可为null
289- *
289+ *
290290 * @return Record对象,无查询结果时返回null
291291 */
292292 public Record queryForRecord (String sql , Map <String , Object > params ) {
@@ -295,7 +295,7 @@ public Record queryForRecord(String sql, Map<String, Object> params) {
295295
296296 /**
297297 * 执行一个SQL查询操作,结果为Record的对象。
298- *
298+ *
299299 * @param sql
300300 * 包含变量占位符的SQL
301301 * @param vars
@@ -315,14 +315,14 @@ public Record queryForRecord(String sql, Map<String, Object> vars, Map<String, O
315315
316316 /**
317317 * 执行一个SQL查询操作,结果为一组对象。
318- *
318+ *
319319 * @param sql
320320 * 包含变量占位符的SQL
321321 * @param params
322322 * 参数map,无参数时,可为null
323323 * @param entity
324324 * 对象类型,无参数时,可为null
325- *
325+ *
326326 * @return 对象列表,无查询结果时返回长度为0的List对象
327327 */
328328 public <T > List <T > query (String sql , Map <String , Object > params , Entity <T > entity ) {
@@ -331,14 +331,14 @@ public <T> List<T> query(String sql, Map<String, Object> params, Entity<T> entit
331331
332332 /**
333333 * 执行一个SQL查询操作,结果为一组对象。
334- *
334+ *
335335 * @param sql
336336 * 包含变量占位符的SQL
337337 * @param params
338338 * 参数map,无参数时,可为null
339339 * @param classOfT
340340 * 对象类类
341- *
341+ *
342342 * @return 对象列表,无查询结果时返回长度为0的List对象
343343 */
344344 public <T > List <T > query (String sql ,
@@ -349,7 +349,7 @@ public <T> List<T> query(String sql,
349349
350350 /**
351351 * 执行一个SQL查询操作,结果为一组对象。
352- *
352+ *
353353 * @param sql
354354 * 包含变量占位符的SQL
355355 * @param vars
@@ -358,7 +358,7 @@ public <T> List<T> query(String sql,
358358 * 参数map,无参数时,可为null
359359 * @param entity
360360 * 对象类型
361- *
361+ *
362362 * @return 对象列表,无查询结果时返回长度为0的List对象
363363 */
364364 public <T > List <T > query (String sql ,
@@ -376,7 +376,7 @@ public <T> List<T> query(String sql,
376376
377377 /**
378378 * 执行一个SQL查询操作,结果为一组对象。
379- *
379+ *
380380 * @param sql
381381 * 包含变量占位符的SQL
382382 * @param vars
@@ -385,7 +385,7 @@ public <T> List<T> query(String sql,
385385 * 参数map,无参数时,可为null
386386 * @param classOfT
387387 * 对象类型
388- *
388+ *
389389 * @return 对象列表,无查询结果时返回长度为0的List对象
390390 */
391391 public <T > List <T > queryForList (String sql ,
@@ -412,14 +412,14 @@ public Object invoke(Connection conn, ResultSet rs, Sql sql) throws SQLException
412412
413413 /**
414414 * 执行一个SQL查询操作,结果为Record对象列表。
415- *
415+ *
416416 * @param sql
417417 * 包含变量占位符的SQL
418418 * @param vars
419419 * 变量map,无参数时,可为null
420420 * @param params
421421 * 参数map,无参数时,可为null
422- *
422+ *
423423 * @return Record列表,无查询结果时返回长度为0的List对象
424424 */
425425 public List <Record > queryRecords (String sql ,
@@ -452,12 +452,12 @@ private void execute(Sql sqlObj, Map<String, Object> vars, Map<String, Object> p
452452 * 创建Sql对象。
453453 * <p>
454454 * 在这里处理Array Collection类型参数,方便SQL IN 表达式的设置
455- *
455+ *
456456 * @param sql
457457 * 包含变量占位符的SQL
458458 * @param params
459459 * 参数map,无参数时,可为null
460- *
460+ *
461461 * @return Sql对象
462462 */
463463 private Sql createSqlObj (String sql , Map <String , Object > params ) {
@@ -472,12 +472,12 @@ private Sql createSqlObj(String sql, Map<String, Object> params) {
472472
473473 /**
474474 * 将Array Collection类型参数对应的sql占位符进行处理
475- *
475+ *
476476 * @param originSql
477477 * 原包含变量占位符的SQL
478478 * @param params
479479 * 参数map,无参数时,可为null
480- *
480+ *
481481 * @return 包含处理IN表达式的sql
482482 */
483483 private String sqlProcess (String originSql , Map <String , Object > params ) {
@@ -490,6 +490,10 @@ private String sqlProcess(String originSql, Map<String, Object> params) {
490490 String paramName = entry .getKey ();
491491 Object paramObj = entry .getValue ();
492492
493+ if (paramObj == null ){
494+ continue ;
495+ }
496+
493497 if (paramObj .getClass ().isArray ()) {
494498 String inSqlExp = inSqlProcess (paramName , paramObj );
495499 newSql = newSql .replaceAll ("@" + paramName , inSqlExp );
@@ -509,10 +513,10 @@ private String sqlProcess(String originSql, Map<String, Object> params) {
509513
510514 /**
511515 * sql参数处理,在这里处理Array Collection类型参数,方便SQL IN 表达式的设置
512- *
516+ *
513517 * @param params
514518 * 参数map,无参数时,可为null
515- *
519+ *
516520 * @return 包含处理IN表达式的sql
517521 */
518522 private Map <String , Object > paramProcess (Map <String , Object > params ) {
@@ -523,6 +527,10 @@ private Map<String, Object> paramProcess(Map<String, Object> params) {
523527 String paramName = entry .getKey ();
524528 Object paramObj = entry .getValue ();
525529
530+ if (paramObj == null ){
531+ continue ;
532+ }
533+
526534 if (paramObj .getClass ().isArray ()) {
527535 inParamProcess (paramName , paramObj , newParams );
528536 newParams .remove (paramName );
0 commit comments