diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/provider/RowSqlProvider.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/provider/RowSqlProvider.java index 57c3dbef..f0fcec31 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/provider/RowSqlProvider.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/provider/RowSqlProvider.java @@ -70,7 +70,7 @@ public class RowSqlProvider { // 先生成 SQL,再设置参数 String sql = DialectFactory.getDialect().forInsertRow(schema, tableName, row); - ProviderUtil.setSqlArgs(params, RowCPI.obtainInsertValues(row)); + ProviderUtil.setSqlArgs(params, row.obtainInsertValues(null)); return sql; } @@ -99,7 +99,7 @@ public class RowSqlProvider { Object[] values = new Object[]{}; for (Row row : rows) { - values = ArrayUtil.concat(values, RowCPI.obtainInsertValues(row)); + values = ArrayUtil.concat(values, row.obtainInsertValues(modifyAttrs)); } ProviderUtil.setSqlArgs(params, values); diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/Row.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/Row.java index d58e86c0..2cbf5050 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/Row.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/Row.java @@ -551,17 +551,22 @@ public class Row extends LinkedHashMap implements UpdateWrapper< } - public Object[] obtainInsertValues() { + public Object[] obtainInsertValues(Set withAttrs) { List values = new ArrayList<>(); - if (primaryKeys != null && !primaryKeys.isEmpty()) { - for (RowKey primaryKey : primaryKeys) { - if (primaryKey.before) { - values.add(get(primaryKey.keyColumn)); + + if (withAttrs == null || withAttrs.isEmpty()) { + withAttrs = keySet(); + + if (primaryKeys != null && !primaryKeys.isEmpty()) { + for (RowKey primaryKey : primaryKeys) { + if (primaryKey.before) { + values.add(get(primaryKey.keyColumn)); + } } } } - for (String key : keySet()) { + for (String key : withAttrs) { Object value = get(key); if (!isPk(key) && !(value instanceof RawValue)) { values.add(value); diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowCPI.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowCPI.java index 5be7598e..3cbcaea7 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowCPI.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/row/RowCPI.java @@ -28,10 +28,6 @@ public class RowCPI { private RowCPI() { } - public static Object[] obtainInsertValues(Row row) { - return row.obtainInsertValues(); - } - public static Set getInsertAttrs(Row row) { return row.getInsertAttrs(); diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/DbTest.java b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/DbTest.java index ec8ffb83..1b30625e 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/DbTest.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/DbTest.java @@ -21,6 +21,7 @@ import com.mybatisflex.core.audit.AuditManager; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.row.Db; import com.mybatisflex.core.row.Row; +import com.mybatisflex.core.row.RowUtil; import com.mybatisflex.core.update.UpdateWrapper; import com.mybatisflex.core.util.UpdateEntity; import org.apache.ibatis.session.Configuration; @@ -106,4 +107,32 @@ public class DbTest { assert false; } } + + + @Test + public void testDbInsertBatchWithFirstRowColumns() { + List rows = new ArrayList<>(); + + Row row1 = new Row(); + row1.put("id", 111); + row1.put("user_name", "张三"); + row1.put("age", 20); + rows.add(row1); + + Row row2 = new Row(); + row2.put("age", 30); + row2.put("id", 20); + row2.put("user_name", "李四"); + rows.add(row2); + + Db.insertBatchWithFirstRowColumns("tb_account", rows); + + Row row3= new Row(); + row3.put("age", 30); + row3.put("id", 333); + row3.put("user_name", "李四3"); + Db.insert("tb_account",row3); + + RowUtil.printPretty(Db.selectAll("tb_account")); + } }