27
27
import org .springframework .data .mapping .PropertyHandler ;
28
28
import org .springframework .data .mybatis .annotation .Condition ;
29
29
import org .springframework .data .mybatis .annotation .Conditions ;
30
+ import org .springframework .data .mybatis .annotation .CreatedBy ;
31
+ import org .springframework .data .mybatis .annotation .CreatedDate ;
30
32
import org .springframework .data .mybatis .annotation .Snowflake ;
31
33
import org .springframework .data .mybatis .id .SnowflakeKeyGenerator ;
32
34
import org .springframework .data .mybatis .mapping .MybatisPersistentEntityImpl ;
@@ -61,8 +63,10 @@ protected void doBuild() {
61
63
addResultMap ();
62
64
63
65
addInsertStatement ();
64
- addUpdateStatement (true );
65
- addUpdateStatement (false );
66
+ addUpdateStatement (true , true );
67
+ addUpdateStatement (false , true );
68
+ addUpdateStatement (true , false );
69
+ addUpdateStatement (false , false );
66
70
addGetByIdStatement ();
67
71
addCountStatement ();
68
72
addCountAllStatement ();
@@ -267,7 +271,7 @@ else if (gv.strategy() == SEQUENCE || (gv.strategy() == AUTO && "sequence"
267
271
268
272
}
269
273
270
- private void addUpdateStatement (boolean ignoreNull ) {
274
+ private void addUpdateStatement (boolean ignoreNull , boolean byId ) {
271
275
272
276
if (!entity .hasIdProperty ()) {
273
277
return ;
@@ -278,75 +282,138 @@ private void addUpdateStatement(boolean ignoreNull) {
278
282
279
283
builder .append (
280
284
281
- findNormalColumns ().stream ().map (p -> {
282
-
283
- if (p .isAnnotationPresent (EmbeddedId .class ) || p .isEmbeddable ()) {
284
- return findNormalColumns (((MybatisPersistentEntityImpl ) entity )
285
- .getRequiredPersistentEntity (p .getActualType ())).stream ()
286
- .map (ep -> {
287
-
288
- StringBuilder sb = new StringBuilder ();
289
- if (ignoreNull ) {
290
- sb .append ("<if test=\" " )
291
- .append (ep .getName ())
292
- .append ("!=null\" >" );
293
- }
294
-
295
- sb .append (ep .getColumnName ()).append ("=" );
296
- sb .append (
297
- (null != ep .getSpecifiedTypeHandler ()
298
- ? String .format (
299
- "#{%s.%s,jdbcType=%s,typeHandler=%s}" ,
300
- p .getName (),
301
- ep .getName (),
302
- ep .getJdbcType ()
303
- .name (),
304
- ep .getSpecifiedTypeHandler ()
305
- .getName ())
306
- : String .format (
307
- "#{%s.%s,jdbcType=%s}" ,
308
- p .getName (),
309
- ep .getName (),
310
- ep .getJdbcType ()
311
- .name ())));
312
- sb .append ("," );
313
- if (ignoreNull ) {
314
- sb .append ("</if>" );
315
- }
316
- return sb .toString ();
317
-
318
- }).collect (Collectors .joining (" " ));
319
- }
285
+ findNormalColumns ().stream ().filter (p -> !(p
286
+ .isAnnotationPresent (CreatedDate .class )
287
+ || p .isAnnotationPresent (
288
+ org .springframework .data .annotation .CreatedDate .class )
289
+ || p .isAnnotationPresent (CreatedBy .class )
290
+ || p .isAnnotationPresent (
291
+ org .springframework .data .annotation .CreatedBy .class )))
292
+ .map (p -> {
293
+
294
+ if (p .isAnnotationPresent (EmbeddedId .class )
295
+ || p .isEmbeddable ()) {
296
+ return findNormalColumns (
297
+ ((MybatisPersistentEntityImpl ) entity )
298
+ .getRequiredPersistentEntity (
299
+ p .getActualType ())).stream ()
300
+ .map (ep -> {
301
+
302
+ StringBuilder sb = new StringBuilder ();
303
+ if (ignoreNull ) {
304
+ sb .append (
305
+ "<if test=\" " );
306
+ if (byId ) {
307
+ sb .append (
308
+ "__entity != null and " );
309
+ sb .append (
310
+ "__entity."
311
+ + p .getName ()
312
+ + " != null and " );
313
+ sb .append (
314
+ "__entity."
315
+ + p .getName ()
316
+ + '.'
317
+ + ep .getName ()
318
+ + " != null" );
319
+ }
320
+ else {
321
+ sb .append (p
322
+ .getName ()
323
+ + " != null and " );
324
+ sb .append (p
325
+ .getName ()
326
+ + '.'
327
+ + ep .getName ()
328
+ + " != null" );
329
+ }
330
+ sb .append ("\" >" );
331
+ }
332
+
333
+ sb .append (ep
334
+ .getColumnName ())
335
+ .append ("=" );
336
+ sb .append ((null != ep
337
+ .getSpecifiedTypeHandler ()
338
+ ? String .format (
339
+ "#{%s.%s,jdbcType=%s,typeHandler=%s}" ,
340
+ byId ? ("__entity."
341
+ + p .getName ())
342
+ : p .getName (),
343
+ ep .getName (),
344
+ ep .getJdbcType ()
345
+ .name (),
346
+ ep .getSpecifiedTypeHandler ()
347
+ .getName ())
348
+ : String .format (
349
+ "#{%s.%s,jdbcType=%s}" ,
350
+ byId ? ("__entity."
351
+ + p .getName ())
352
+ : p .getName (),
353
+ ep .getName (),
354
+ ep .getJdbcType ()
355
+ .name ())));
356
+ sb .append ("," );
357
+ if (ignoreNull ) {
358
+ sb .append (
359
+ "</if>" );
360
+ }
361
+ return sb .toString ();
362
+
363
+ }).collect (Collectors
364
+ .joining (" " ));
365
+ }
320
366
321
- if (p .isVersionProperty ()) {
322
- return p .getColumnName () + "=" + p .getColumnName () + "+1," ;
323
- }
367
+ if (p .isVersionProperty ()) {
368
+ return p .getColumnName () + "=" + p .getColumnName ()
369
+ + "+1," ;
370
+ }
324
371
325
- StringBuilder sb = new StringBuilder ();
326
- if (ignoreNull ) {
327
- sb .append ("<if test=\" " ).append (p .getName ()).append ("!=null\" >" );
328
- }
372
+ StringBuilder sb = new StringBuilder ();
373
+ if (ignoreNull ) {
329
374
330
- sb .append (p .getColumnName ()).append ("=" );
331
- sb .append ((null != p .getSpecifiedTypeHandler ()
332
- ? String .format ("#{%s,jdbcType=%s,typeHandler=%s}" ,
333
- p .getName (), p .getJdbcType ().name (),
334
- p .getSpecifiedTypeHandler ().getName ())
335
- : String .format ("#{%s,jdbcType=%s}" , p .getName (),
336
- p .getJdbcType ().name ())));
337
- sb .append ("," );
338
- if (ignoreNull ) {
339
- sb .append ("</if>" );
340
- }
341
- return sb .toString ();
375
+ if (ignoreNull ) {
376
+ sb .append ("<if test=\" " );
377
+ if (byId ) {
378
+ sb .append ("__entity != null and " );
379
+ sb .append ("__entity." + p .getName () + " != null" );
342
380
343
- }).collect (Collectors .joining ()));
381
+ }
382
+ else {
383
+ sb .append (p .getName () + " != null" );
384
+ }
385
+ sb .append ("\" >" );
386
+ }
344
387
345
- builder .append ("</set> where " ).append (buildIdCaluse (true ));
388
+ }
389
+
390
+ sb .append (p .getColumnName ()).append ("=" );
391
+ sb .append ((null != p .getSpecifiedTypeHandler ()
392
+ ? String .format ("#{%s,jdbcType=%s,typeHandler=%s}" ,
393
+ byId ? ("__entity." + p .getName ())
394
+ : p .getName (),
395
+ p .getJdbcType ().name (),
396
+ p .getSpecifiedTypeHandler ().getName ())
397
+ : String .format ("#{%s,jdbcType=%s}" ,
398
+ byId ? ("__entity." + p .getName ())
399
+ : p .getName (),
400
+ p .getJdbcType ().name ())));
401
+ sb .append ("," );
402
+ if (ignoreNull ) {
403
+ sb .append ("</if>" );
404
+ }
405
+ return sb .toString ();
406
+
407
+ }).collect (Collectors .joining ()));
408
+
409
+ builder .append ("</set> where " ).append (buildIdCaluse (true , byId ));
346
410
347
411
String [] sqls = new String [] { "<script>" , builder .toString (), "</script>" };
348
- addMappedStatement (ignoreNull ? "__update_ignore_null" : "__update" , sqls , UPDATE ,
349
- entity .getType ());
412
+ addMappedStatement (
413
+ ignoreNull
414
+ ? (byId ? "__update_by_id_ignore_null" : "__update_ignore_null" )
415
+ : (byId ? "__update_by_id" : "__update" ),
416
+ sqls , UPDATE , entity .getType ());
350
417
}
351
418
352
419
private void addGetByIdStatement () {
@@ -356,7 +423,7 @@ private void addGetByIdStatement() {
356
423
// .map(p -> String.format("%s as %s", p.getColumnName(), p.getName()))
357
424
// .collect(Collectors.joining(",")));
358
425
builder .append (" from " ).append (entity .getTableName ()).append (" where " )
359
- .append (buildIdCaluse (false ));
426
+ .append (buildIdCaluse (false , false ));
360
427
addMappedStatement ("__get_by_id" , new String [] { builder .toString () }, SELECT ,
361
428
entity .getIdProperty ().getType (), RESULT_MAP );
362
429
}
@@ -402,7 +469,7 @@ private void addDeleteByIdStatement() {
402
469
StringBuilder builder = new StringBuilder ();
403
470
404
471
builder .append ("delete from " ).append (entity .getTableName ()).append (" where " )
405
- .append (buildIdCaluse (false ));
472
+ .append (buildIdCaluse (false , false ));
406
473
addMappedStatement ("__delete_by_id" , new String [] { builder .toString () }, DELETE ,
407
474
entity .getIdProperty ().getType ());
408
475
@@ -511,7 +578,7 @@ private String buildCondition() {
511
578
return builder .toString ();
512
579
}
513
580
514
- private String buildIdCaluse (boolean clearly ) {
581
+ private String buildIdCaluse (boolean clearly , boolean byId ) {
515
582
516
583
if (!entity .hasIdProperty ()) {
517
584
return null ;
@@ -526,24 +593,28 @@ private String buildIdCaluse(boolean clearly) {
526
593
+ (null != ep .getSpecifiedTypeHandler ()
527
594
? String .format (
528
595
"#{%s,jdbcType=%s,typeHandler=%s}" ,
529
- clearly ? (p .getName () + '.'
596
+ clearly ? ((byId ? "__id"
597
+ : p .getName ()) + '.'
530
598
+ ep .getName ())
531
599
: ep .getName (),
532
600
ep .getJdbcType ().name (),
533
601
ep .getSpecifiedTypeHandler ()
534
602
.getName ())
535
603
: String .format ("#{%s,jdbcType=%s}" , clearly
536
- ? (p .getName () + '.' + ep .getName ())
604
+ ? ((byId ? "__id" : p .getName ()) + '.'
605
+ + ep .getName ())
537
606
: ep .getName (),
538
607
ep .getJdbcType ().name ())))
539
608
.collect (Collectors .joining (" and " ));
540
609
}
541
610
542
- return p .getColumnName () + " = " + (null != p .getSpecifiedTypeHandler ()
543
- ? String .format ("#{%s,jdbcType=%s,typeHandler=%s}" , p .getName (),
544
- p .getJdbcType ().name (), p .getSpecifiedTypeHandler ().getName ())
545
- : String .format ("#{%s,jdbcType=%s}" , p .getName (),
546
- p .getJdbcType ().name ()));
611
+ return p .getColumnName () + " = "
612
+ + (null != p .getSpecifiedTypeHandler ()
613
+ ? String .format ("#{%s,jdbcType=%s,typeHandler=%s}" ,
614
+ byId ? "__id" : p .getName (), p .getJdbcType ().name (),
615
+ p .getSpecifiedTypeHandler ().getName ())
616
+ : String .format ("#{%s,jdbcType=%s}" , byId ? "__id" : p .getName (),
617
+ p .getJdbcType ().name ()));
547
618
}
548
619
549
620
}
0 commit comments