From f23cf43a45091c1c2ef0b2c5b5f1226f05f63490 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=80=E6=BA=90=E6=B5=B7=E5=93=A5?= Date: Wed, 23 Aug 2023 18:15:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20UpdateEntity=20=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E5=AF=B9=20@Column(ignore=20=3D=20true)=20=E7=9A=84=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E8=BF=9B=E8=A1=8C=E8=BF=87=E6=BB=A4=20close=20#I7RE0J?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/dialect/impl/CommonsDialectImpl.java | 8 +++---- .../com/mybatisflex/core/table/TableInfo.java | 24 +++++++++++++------ .../com/mybatisflex/test/AccountTester.java | 17 +++++++++++++ 3 files changed, 38 insertions(+), 11 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/CommonsDialectImpl.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/CommonsDialectImpl.java index 894ed878..5e548223 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/CommonsDialectImpl.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/CommonsDialectImpl.java @@ -748,11 +748,11 @@ public class CommonsDialectImpl implements IDialect { StringJoiner stringJoiner = new StringJoiner(DELIMITER); - for (String modifyAttr : updateColumns) { - if (rawValueMap.containsKey(modifyAttr)) { - stringJoiner.add(wrap(modifyAttr) + EQUALS + rawValueMap.get(modifyAttr).toSql(this)); + for (String updateColumn : updateColumns) { + if (rawValueMap.containsKey(updateColumn)) { + stringJoiner.add(wrap(updateColumn) + EQUALS + rawValueMap.get(updateColumn).toSql(this)); } else { - stringJoiner.add(wrap(modifyAttr) + EQUALS_PLACEHOLDER); + stringJoiner.add(wrap(updateColumn) + EQUALS_PLACEHOLDER); } } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfo.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfo.java index 0a604677..4039c7e6 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfo.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfo.java @@ -362,7 +362,7 @@ public class TableInfo { for (int i = 0; i < columnInfoList.size(); i++) { ColumnInfo columnInfo = columnInfoList.get(i); //真正的字段(没有做忽略标识) - if (!columnInfo.isIgnore()){ + if (!columnInfo.isIgnore()) { columnNames.add(columnInfo.column); columnInfoMapping.put(columnInfo.column, columnInfo); @@ -521,6 +521,7 @@ public class TableInfo { } + @SuppressWarnings({"unchecked", "rawtypes"}) public Map obtainUpdateRawValueMap(Object entity) { if (!(entity instanceof UpdateWrapper)) { return Collections.emptyMap(); @@ -557,7 +558,13 @@ public class TableInfo { return Collections.emptySet(); } for (String property : updates.keySet()) { - String column = getColumnByProperty(property); +// String column = getColumnByProperty(property); + String column = propertyColumnMapping.get(property); + if (column == null) { + continue; + } + + if (onUpdateColumns != null && onUpdateColumns.containsKey(column)) { continue; } @@ -628,12 +635,14 @@ public class TableInfo { if (updates.isEmpty()) { return FlexConsts.EMPTY_ARRAY; } -// Set properties = (Set) updates; -// if (properties.isEmpty()) { -// return values.toArray(); -// } for (String property : updates.keySet()) { - String column = getColumnByProperty(property); + + String column = propertyColumnMapping.get(property); + if (column == null) { + continue; + } + + if (onUpdateColumns != null && onUpdateColumns.containsKey(column)) { continue; } @@ -718,6 +727,7 @@ public class TableInfo { /** * 获取主键值 + * * @param entity * @return 主键值,有多个主键时返回数组 */ diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/AccountTester.java b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/AccountTester.java index 0e72b0e7..d10e9928 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/AccountTester.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/AccountTester.java @@ -157,6 +157,23 @@ public class AccountTester { } + /** + * issues https://gitee.com/mybatis-flex/mybatis-flex/issues/I7RE0J + */ + @Test + public void testUpdateByUpdateWrapper() { + Account account = new Account(); + account.setId(1L); + account = UpdateWrapper.of(account) + .set(Account::getId,1) + .set(Account::getAge, 20) + //设置 Ignore 字段,会被自动忽略 + .setRaw(Account::getTitle, "xxxx") + .toEntity(); + accountMapper.update(account); + } + + @Test