mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 00:58:24 +08:00
fix: Db.insertBatchWithFirstRowColumns 当 row key 的顺序没保持一致时,出错的问题 #273
This commit is contained in:
parent
bf3dcbc625
commit
7cd79889ae
@ -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);
|
||||
|
||||
|
||||
@ -551,17 +551,22 @@ public class Row extends LinkedHashMap<String, Object> implements UpdateWrapper<
|
||||
}
|
||||
|
||||
|
||||
public Object[] obtainInsertValues() {
|
||||
public Object[] obtainInsertValues(Set<String> withAttrs) {
|
||||
List<Object> 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);
|
||||
|
||||
@ -28,10 +28,6 @@ public class RowCPI {
|
||||
private RowCPI() {
|
||||
}
|
||||
|
||||
public static Object[] obtainInsertValues(Row row) {
|
||||
return row.obtainInsertValues();
|
||||
}
|
||||
|
||||
|
||||
public static Set<String> getInsertAttrs(Row row) {
|
||||
return row.getInsertAttrs();
|
||||
|
||||
@ -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<Row> 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"));
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user