25
25
package tk .mybatis .mapper .mapperhelper ;
26
26
27
27
import tk .mybatis .mapper .entity .EntityColumn ;
28
- import tk .mybatis .mapper .entity .EntityTable ;
29
28
import tk .mybatis .mapper .entity .IDynamicTableName ;
30
29
import tk .mybatis .mapper .util .StringUtil ;
31
30
@@ -69,12 +68,17 @@ public static String getDynamicTableName(Class<?> entityClass, String tableName)
69
68
*/
70
69
public static String getDynamicTableName (Class <?> entityClass , String tableName , String parameterName ) {
71
70
if (IDynamicTableName .class .isAssignableFrom (entityClass )) {
72
- return "<if test=\" @tk.mybatis.mapper.util.OGNL@isDynamicParameter(" + parameterName + ") and " + parameterName + ".dynamicTableName != null and " + parameterName + ".dynamicTableName != ''\" >\n " +
73
- "${" + parameterName + ".dynamicTableName}\n " +
74
- "</if>\n " +
75
- "<if test=\" @tk.mybatis.mapper.util.OGNL@isNotDynamicParameter(" + parameterName + ") or " + parameterName + ".dynamicTableName == null or " + parameterName + ".dynamicTableName == ''\" >\n " +
76
- tableName + "\n " +
77
- "</if>" ;
71
+ if (StringUtil .isNotEmpty (parameterName )) {
72
+ return "<if test=\" @tk.mybatis.mapper.util.OGNL@isDynamicParameter(" + parameterName + ") and " + parameterName + ".dynamicTableName != null and " + parameterName + ".dynamicTableName != ''\" >\n " +
73
+ "${" + parameterName + ".dynamicTableName}\n " +
74
+ "</if>\n " +
75
+ "<if test=\" @tk.mybatis.mapper.util.OGNL@isNotDynamicParameter(" + parameterName + ") or " + parameterName + ".dynamicTableName == null or " + parameterName + ".dynamicTableName == ''\" >\n " +
76
+ tableName + "\n " +
77
+ "</if>" ;
78
+ } else {
79
+ return getDynamicTableName (entityClass , tableName );
80
+ }
81
+
78
82
} else {
79
83
return tableName ;
80
84
}
@@ -177,7 +181,11 @@ public static String getIfNotNull(String entityName, EntityColumn column, String
177
181
}
178
182
sql .append (column .getProperty ()).append (" != null" );
179
183
if (empty && column .getJavaType ().equals (String .class )) {
180
- sql .append (" and " ).append (column .getProperty ()).append (" != '' " );
184
+ sql .append (" and " );
185
+ if (StringUtil .isNotEmpty (entityName )) {
186
+ sql .append (entityName ).append ("." );
187
+ }
188
+ sql .append (column .getProperty ()).append (" != '' " );
181
189
}
182
190
sql .append ("\" >" );
183
191
sql .append (contents );
@@ -202,7 +210,11 @@ public static String getIfIsNull(String entityName, EntityColumn column, String
202
210
}
203
211
sql .append (column .getProperty ()).append (" == null" );
204
212
if (empty && column .getJavaType ().equals (String .class )) {
205
- sql .append (" or " ).append (column .getProperty ()).append (" == '' " );
213
+ sql .append (" or " );
214
+ if (StringUtil .isNotEmpty (entityName )) {
215
+ sql .append (entityName ).append ("." );
216
+ }
217
+ sql .append (column .getProperty ()).append (" == '' " );
206
218
}
207
219
sql .append ("\" >" );
208
220
sql .append (contents );
@@ -211,53 +223,242 @@ public static String getIfIsNull(String entityName, EntityColumn column, String
211
223
}
212
224
213
225
/**
214
- * 获取 < code>[AND] column = #{property}</code>
226
+ * 获取所有查询列,如id,name, code...
215
227
*
216
- * @param column
217
- * @param first
228
+ * @param entityClass
218
229
* @return
219
230
*/
220
- public static String getColumnEqualsProperty (EntityColumn column , boolean first ) {
231
+ public static String getAllColumns (Class <?> entityClass ) {
232
+ Set <EntityColumn > columnList = EntityHelper .getColumns (entityClass );
221
233
StringBuilder sql = new StringBuilder ();
222
- if (! first ) {
223
- sql .append (" AND " );
234
+ for ( EntityColumn entityColumn : columnList ) {
235
+ sql .append (entityColumn . getColumn ()). append ( ", " );
224
236
}
225
- sql .append (column .getColumnEqualsHolder ());
237
+ return sql .substring (0 , sql .length () - 1 );
238
+ }
239
+
240
+ /**
241
+ * select xxx,xxx...
242
+ *
243
+ * @param entityClass
244
+ * @return
245
+ */
246
+ public static String selectAllColumns (Class <?> entityClass ) {
247
+ StringBuilder sql = new StringBuilder ();
248
+ sql .append ("SELECT " );
249
+ sql .append (getAllColumns (entityClass ));
250
+ sql .append (" " );
226
251
return sql .toString ();
227
252
}
228
253
229
254
/**
230
- * 获取所有列的where节点中的if判断列
255
+ * from tableName - 动态表名
231
256
*
232
- * @param entityTable
233
- * @param empty
257
+ * @param entityClass
258
+ * @param defaultTableName
259
+ * @return
260
+ */
261
+ public static String fromTable (Class <?> entityClass , String defaultTableName ) {
262
+ StringBuilder sql = new StringBuilder ();
263
+ sql .append (" FROM " );
264
+ sql .append (getDynamicTableName (entityClass , defaultTableName ));
265
+ sql .append (" " );
266
+ return sql .toString ();
267
+ }
268
+
269
+ /**
270
+ * update tableName - 动态表名
271
+ *
272
+ * @param entityClass
273
+ * @param defaultTableName
274
+ * @return
275
+ */
276
+ public static String updateTable (Class <?> entityClass , String defaultTableName ) {
277
+ return updateTable (entityClass , defaultTableName , null );
278
+ }
279
+
280
+ /**
281
+ * update tableName - 动态表名
282
+ *
283
+ * @param entityClass
284
+ * @param defaultTableName 默认表名
285
+ * @param entityName 别名
286
+ * @return
287
+ */
288
+ public static String updateTable (Class <?> entityClass , String defaultTableName , String entityName ) {
289
+ StringBuilder sql = new StringBuilder ();
290
+ sql .append ("UPDATE " );
291
+ sql .append (getDynamicTableName (entityClass , defaultTableName , entityName ));
292
+ sql .append (" " );
293
+ return sql .toString ();
294
+ }
295
+
296
+ /**
297
+ * delete tableName - 动态表名
298
+ *
299
+ * @param entityClass
300
+ * @param defaultTableName
301
+ * @return
302
+ */
303
+ public static String deleteFromTable (Class <?> entityClass , String defaultTableName ) {
304
+ StringBuilder sql = new StringBuilder ();
305
+ sql .append ("DELETE FROM " );
306
+ sql .append (getDynamicTableName (entityClass , defaultTableName ));
307
+ sql .append (" " );
308
+ return sql .toString ();
309
+ }
310
+
311
+ /**
312
+ * insert into tableName - 动态表名
313
+ *
314
+ * @param entityClass
315
+ * @param defaultTableName
316
+ * @return
317
+ */
318
+ public static String insertIntoTable (Class <?> entityClass , String defaultTableName ) {
319
+ StringBuilder sql = new StringBuilder ();
320
+ sql .append ("INSERT INTO " );
321
+ sql .append (getDynamicTableName (entityClass , defaultTableName ));
322
+ sql .append (" " );
323
+ return sql .toString ();
324
+ }
325
+
326
+ /**
327
+ * insert table()列
328
+ *
329
+ * @param entityClass
330
+ * @param skipId 是否从列中忽略id类型
331
+ * @param notNull 是否判断!=null
332
+ * @param notEmpty 是否判断String类型!=''
234
333
* @return
235
334
*/
236
- public static String getAllIfColumnNode (EntityTable entityTable , boolean empty ) {
237
- Set <EntityColumn > columnList = entityTable .getEntityClassColumns ();
238
- boolean first = true ;
239
- StringBuilder sql = new StringBuilder (" <where> " );
335
+ public static String insertColumns (Class <?> entityClass , boolean skipId , boolean notNull , boolean notEmpty ) {
336
+ StringBuilder sql = new StringBuilder ();
337
+ sql .append ("<trim prefix=\" (\" suffix=\" )\" suffixOverrides=\" ,\" >" );
338
+ //获取全部列
339
+ Set <EntityColumn > columnList = EntityHelper .getColumns (entityClass );
340
+ //当某个列有主键策略时,不需要考虑他的属性是否为空,因为如果为空,一定会根据主键策略给他生成一个值
240
341
for (EntityColumn column : columnList ) {
241
- sql .append (getIfNotNull (column , getColumnEqualsProperty (column , first ), empty ));
242
- first = false ;
342
+ if (skipId && !column .isId ()) {
343
+ if (notNull ) {
344
+ sql .append (SqlHelper .getIfNotNull (column , column .getColumn () + "," , notEmpty ));
345
+ } else {
346
+ sql .append (column .getColumn () + "," );
347
+ }
348
+ }
349
+ }
350
+ sql .append ("</trim>" );
351
+ return sql .toString ();
352
+ }
353
+
354
+ /**
355
+ * insert-values()列
356
+ *
357
+ * @param entityClass
358
+ * @param skipId 是否从列中忽略id类型
359
+ * @param notNull 是否判断!=null
360
+ * @param notEmpty 是否判断String类型!=''
361
+ * @return
362
+ */
363
+ public static String insertValuesColumns (Class <?> entityClass , boolean skipId , boolean notNull , boolean notEmpty ) {
364
+ StringBuilder sql = new StringBuilder ();
365
+ sql .append ("<trim prefix=\" VALUES (\" suffix=\" )\" suffixOverrides=\" ,\" >" );
366
+ //获取全部列
367
+ Set <EntityColumn > columnList = EntityHelper .getColumns (entityClass );
368
+ //当某个列有主键策略时,不需要考虑他的属性是否为空,因为如果为空,一定会根据主键策略给他生成一个值
369
+ for (EntityColumn column : columnList ) {
370
+ if (skipId && !column .isId ()) {
371
+ if (notNull ) {
372
+ sql .append (SqlHelper .getIfNotNull (column , column .getColumnHolder () + "," , notEmpty ));
373
+ } else {
374
+ sql .append (column .getColumnHolder () + "," );
375
+ }
376
+ }
377
+ }
378
+ sql .append ("</trim>" );
379
+ return sql .toString ();
380
+ }
381
+
382
+ /**
383
+ * update set列
384
+ *
385
+ * @param entityClass
386
+ * @param entityName 实体映射名
387
+ * @param notNull 是否判断!=null
388
+ * @param notEmpty 是否判断String类型!=''
389
+ * @return
390
+ */
391
+ public static String updateSetColumns (Class <?> entityClass , String entityName , boolean notNull , boolean notEmpty ) {
392
+ StringBuilder sql = new StringBuilder ();
393
+ sql .append ("<set>" );
394
+ //获取全部列
395
+ Set <EntityColumn > columnList = EntityHelper .getColumns (entityClass );
396
+ //当某个列有主键策略时,不需要考虑他的属性是否为空,因为如果为空,一定会根据主键策略给他生成一个值
397
+ for (EntityColumn column : columnList ) {
398
+ if (!column .isId ()) {
399
+ if (notNull ) {
400
+ sql .append (SqlHelper .getIfNotNull (entityName , column , column .getColumnEqualsHolder (entityName ) + "," , notEmpty ));
401
+ } else {
402
+ sql .append (column .getColumnEqualsHolder (entityName ) + "," );
403
+ }
404
+ }
405
+ }
406
+ sql .append ("</set>" );
407
+ return sql .toString ();
408
+ }
409
+
410
+ /**
411
+ * where主键条件
412
+ *
413
+ * @param entityClass
414
+ * @return
415
+ */
416
+ public static String wherePKColumns (Class <?> entityClass ) {
417
+ StringBuilder sql = new StringBuilder ();
418
+ sql .append ("<where>" );
419
+ //获取全部列
420
+ Set <EntityColumn > columnList = EntityHelper .getPKColumns (entityClass );
421
+ //当某个列有主键策略时,不需要考虑他的属性是否为空,因为如果为空,一定会根据主键策略给他生成一个值
422
+ for (EntityColumn column : columnList ) {
423
+ sql .append ("AND " + column .getColumnEqualsHolder ());
243
424
}
244
425
sql .append ("</where>" );
245
426
return sql .toString ();
246
427
}
247
428
248
429
/**
249
- * 获取所有查询列,如id,name,code...
430
+ * where所有列的条件,会判断是否!=null
250
431
*
251
432
* @param entityClass
252
433
* @return
253
434
*/
254
- public static String getAllColumns (Class <?> entityClass ) {
435
+ public static String whereAllIfColumns (Class <?> entityClass , boolean empty ) {
436
+ StringBuilder sql = new StringBuilder ();
437
+ sql .append ("<where>" );
438
+ //获取全部列
255
439
Set <EntityColumn > columnList = EntityHelper .getColumns (entityClass );
440
+ //当某个列有主键策略时,不需要考虑他的属性是否为空,因为如果为空,一定会根据主键策略给他生成一个值
441
+ for (EntityColumn column : columnList ) {
442
+ sql .append (getIfNotNull (column , "AND " + column .getColumnEqualsHolder (), empty ));
443
+ }
444
+ sql .append ("</where>" );
445
+ return sql .toString ();
446
+ }
447
+
448
+ /**
449
+ * 获取默认的orderBy,通过注解设置的
450
+ *
451
+ * @param entityClass
452
+ * @return
453
+ */
454
+ public static String orderByDefault (Class <?> entityClass ) {
256
455
StringBuilder sql = new StringBuilder ();
257
- for (EntityColumn entityColumn : columnList ) {
258
- sql .append (entityColumn .getColumn ()).append ("," );
456
+ String orderByClause = EntityHelper .getOrderByClause (entityClass );
457
+ if (orderByClause .length () > 0 ) {
458
+ sql .append (" ORDER BY " );
459
+ sql .append (orderByClause );
259
460
}
260
- return sql .substring ( 0 , sql . length () - 1 );
461
+ return sql .toString ( );
261
462
}
262
463
263
464
/**
0 commit comments