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