From 23598242f002a30a5e29bef434e5fcdfe57954d2 Mon Sep 17 00:00:00 2001 From: Timi Date: Mon, 1 Dec 2025 11:00:03 +0800 Subject: [PATCH] improve SQLProvider selective filter --- .../com/imyeyu/spring/util/SQLProvider.java | 62 +++++++++---------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/imyeyu/spring/util/SQLProvider.java b/src/main/java/com/imyeyu/spring/util/SQLProvider.java index 4c4d338..c0d24aa 100644 --- a/src/main/java/com/imyeyu/spring/util/SQLProvider.java +++ b/src/main/java/com/imyeyu/spring/util/SQLProvider.java @@ -153,16 +153,8 @@ public class SQLProvider { public String selectAllByExample(Object entity) { EntityMeta meta = getEntityMeta(entity.getClass()); String conditionClause = meta.fieldColumnList.stream() - .filter(fc -> { - try { - return Ref.getFieldValue(entity, fc.field, Object.class) != null; - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - }) - .map(fc -> { - return "`%s` = #{%s}".formatted(fc.columnName, fc.fieldName); - }) + .filter(fc -> fc.isNotNull(entity)) + .map(fc -> "`%s` = #{%s}".formatted(fc.columnName, fc.fieldName)) .collect(Collectors.joining(" AND ")); StringBuilder sql = new StringBuilder(); @@ -187,14 +179,12 @@ public class SQLProvider { TimiException.required(meta.idFieldColumn, "not found id field in %s".formatted(meta.entityClass)); TimiException.required(meta.canUpdate, "not allow update for %s".formatted(meta.entityClass)); + if (entity instanceof Updatable updatable) { + updatable.setUpdatedAt(Time.now()); + } String setClause = meta.fieldColumnList.stream() - .filter(fc -> !fc.isId) - .map(fc -> { - if (entity instanceof Updatable updatableEntity) { - updatableEntity.setUpdatedAt(Time.now()); - } - return "`%s` = #{%s}".formatted(fc.columnName, fc.fieldName); - }) + .filter(FieldColumn::isNotId) + .map(fc -> "`%s` = #{%s}".formatted(fc.columnName, fc.fieldName)) .collect(Collectors.joining(", ")); return "UPDATE `%s` SET %s WHERE `%s` = #{%s}".formatted(meta.table, setClause, meta.idFieldColumn.columnName, meta.idFieldColumn.fieldName); } @@ -213,26 +203,16 @@ public class SQLProvider { if (entity instanceof Creatable creatable) { creatable.setCreatedAt(null); } + if (entity instanceof Updatable updatable) { + updatable.setUpdatedAt(Time.now()); + } if (entity instanceof Deletable deletable) { deletable.setDeletedAt(null); } String setClause = meta.fieldColumnList.stream() - .filter(fc -> { - if (fc.isId) { - return false; - } - try { - return Ref.getFieldValue(entity, fc.field, Object.class) != null; - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - }) - .map(fc -> { - if (entity instanceof Updatable updatableEntity) { - updatableEntity.setUpdatedAt(Time.now()); - } - return "`%s` = #{%s}".formatted(fc.columnName, fc.fieldName); - }) + .filter(FieldColumn::isNotId) + .filter(fc -> fc.isNotNull(entity)) + .map(fc -> "`%s` = #{%s}".formatted(fc.columnName, fc.fieldName)) .collect(Collectors.joining(", ")); return "UPDATE `%s` SET %s WHERE `%s` = #{%s}".formatted(meta.table, setClause, meta.idFieldColumn.columnName, meta.idFieldColumn.fieldName); } @@ -459,6 +439,18 @@ public class SQLProvider { } } + public boolean isNull(Object entity) { + try { + return Ref.getFieldValue(entity, field, Object.class) == null; + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + public boolean isNotNull(Object entity) { + return !isNull(entity); + } + public Field getField() { return field; } @@ -475,6 +467,10 @@ public class SQLProvider { return isId; } + public boolean isNotId() { + return !isId(); + } + public boolean isAutoUUID() { return isAutoUUID; }