mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-06 16:48:24 +08:00
fix: close #I7U37A
This commit is contained in:
parent
9387b76a8b
commit
9e50353f77
@ -73,19 +73,26 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
@Override
|
@Override
|
||||||
public String forInsertRow(String schema, String tableName, Row row) {
|
public String forInsertRow(String schema, String tableName, Row row) {
|
||||||
StringBuilder fields = new StringBuilder();
|
StringBuilder fields = new StringBuilder();
|
||||||
StringBuilder questions = new StringBuilder();
|
StringBuilder paramsOrPlaceholder = new StringBuilder();
|
||||||
|
|
||||||
Set<String> modifyAttrs = RowCPI.getModifyAttrs(row);
|
Set<String> modifyAttrs = RowCPI.getModifyAttrs(row);
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for (String attr : modifyAttrs) {
|
for (String attr : modifyAttrs) {
|
||||||
fields.append(wrap(attr));
|
fields.append(wrap(attr));
|
||||||
questions.append(PLACEHOLDER);
|
|
||||||
|
Object value = row.get(attr);
|
||||||
|
if (value instanceof RawValue) {
|
||||||
|
paramsOrPlaceholder.append(((RawValue) value).toSql(this));
|
||||||
|
} else {
|
||||||
|
paramsOrPlaceholder.append(PLACEHOLDER);
|
||||||
|
}
|
||||||
if (index != modifyAttrs.size() - 1) {
|
if (index != modifyAttrs.size() - 1) {
|
||||||
fields.append(DELIMITER);
|
fields.append(DELIMITER);
|
||||||
questions.append(DELIMITER);
|
paramsOrPlaceholder.append(DELIMITER);
|
||||||
}
|
}
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append(INSERT_INTO);
|
sql.append(INSERT_INTO);
|
||||||
if (StringUtil.isNotBlank(schema)) {
|
if (StringUtil.isNotBlank(schema)) {
|
||||||
@ -93,7 +100,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
}
|
}
|
||||||
sql.append(wrap(getRealTable(tableName)));
|
sql.append(wrap(getRealTable(tableName)));
|
||||||
sql.append(BRACKET_LEFT).append(fields).append(BRACKET_RIGHT);
|
sql.append(BRACKET_LEFT).append(fields).append(BRACKET_RIGHT);
|
||||||
sql.append(VALUES).append(BRACKET_LEFT).append(questions).append(BRACKET_RIGHT);
|
sql.append(VALUES).append(BRACKET_LEFT).append(paramsOrPlaceholder).append(BRACKET_RIGHT);
|
||||||
return sql.toString();
|
return sql.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -65,8 +65,11 @@ public class RowSqlProvider {
|
|||||||
String tableName = ProviderUtil.getTableName(params);
|
String tableName = ProviderUtil.getTableName(params);
|
||||||
String schema = ProviderUtil.getSchemaName(params);
|
String schema = ProviderUtil.getSchemaName(params);
|
||||||
Row row = ProviderUtil.getRow(params);
|
Row row = ProviderUtil.getRow(params);
|
||||||
|
|
||||||
|
// 先生成 SQL,再设置参数
|
||||||
|
String sql = DialectFactory.getDialect().forInsertRow(schema, tableName, row);
|
||||||
ProviderUtil.setSqlArgs(params, RowCPI.obtainModifyValues(row));
|
ProviderUtil.setSqlArgs(params, RowCPI.obtainModifyValues(row));
|
||||||
return DialectFactory.getDialect().forInsertRow(schema, tableName, row);
|
return sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -89,14 +92,16 @@ public class RowSqlProvider {
|
|||||||
Set<String> modifyAttrs = new LinkedHashSet<>(RowCPI.getModifyAttrs(rows.get(0)));
|
Set<String> modifyAttrs = new LinkedHashSet<>(RowCPI.getModifyAttrs(rows.get(0)));
|
||||||
rows.forEach(row -> row.keep(modifyAttrs));
|
rows.forEach(row -> row.keep(modifyAttrs));
|
||||||
|
|
||||||
|
//sql: INSERT INTO `tb_table`(`name`, `sex`) VALUES (?, ?),(?, ?),(?, ?)
|
||||||
|
String sql = DialectFactory.getDialect().forInsertBatchWithFirstRowColumns(schema, tableName, rows);
|
||||||
|
|
||||||
Object[] values = new Object[]{};
|
Object[] values = new Object[]{};
|
||||||
for (Row row : rows) {
|
for (Row row : rows) {
|
||||||
values = ArrayUtil.concat(values, RowCPI.obtainModifyValues(row));
|
values = ArrayUtil.concat(values, RowCPI.obtainModifyValues(row));
|
||||||
}
|
}
|
||||||
ProviderUtil.setSqlArgs(params, values);
|
ProviderUtil.setSqlArgs(params, values);
|
||||||
|
|
||||||
//sql: INSERT INTO `tb_table`(`name`, `sex`) VALUES (?, ?),(?, ?),(?, ?)
|
return sql;
|
||||||
return DialectFactory.getDialect().forInsertBatchWithFirstRowColumns(schema, tableName, rows);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -115,9 +120,9 @@ public class RowSqlProvider {
|
|||||||
String tableName = ProviderUtil.getTableName(params);
|
String tableName = ProviderUtil.getTableName(params);
|
||||||
String[] primaryKeys = ProviderUtil.getPrimaryKeys(params);
|
String[] primaryKeys = ProviderUtil.getPrimaryKeys(params);
|
||||||
|
|
||||||
|
String sql = DialectFactory.getDialect().forDeleteById(schema, tableName, primaryKeys);
|
||||||
ProviderUtil.setSqlArgs(params, primaryValues);
|
ProviderUtil.setSqlArgs(params, primaryValues);
|
||||||
|
return sql;
|
||||||
return DialectFactory.getDialect().forDeleteById(schema, tableName, primaryKeys);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -133,8 +138,9 @@ public class RowSqlProvider {
|
|||||||
String[] primaryKeys = ProviderUtil.getPrimaryKeys(params);
|
String[] primaryKeys = ProviderUtil.getPrimaryKeys(params);
|
||||||
Object[] primaryValues = ProviderUtil.getPrimaryValues(params);
|
Object[] primaryValues = ProviderUtil.getPrimaryValues(params);
|
||||||
|
|
||||||
|
String sql = DialectFactory.getDialect().forDeleteBatchByIds(schema, tableName, primaryKeys, primaryValues);
|
||||||
ProviderUtil.setSqlArgs(params, primaryValues);
|
ProviderUtil.setSqlArgs(params, primaryValues);
|
||||||
return DialectFactory.getDialect().forDeleteBatchByIds(schema, tableName, primaryKeys, primaryValues);
|
return sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -152,7 +158,6 @@ public class RowSqlProvider {
|
|||||||
|
|
||||||
//优先构建 sql,再构建参数
|
//优先构建 sql,再构建参数
|
||||||
String sql = DialectFactory.getDialect().forDeleteByQuery(queryWrapper);
|
String sql = DialectFactory.getDialect().forDeleteByQuery(queryWrapper);
|
||||||
|
|
||||||
Object[] valueArray = CPI.getValueArray(queryWrapper);
|
Object[] valueArray = CPI.getValueArray(queryWrapper);
|
||||||
ProviderUtil.setSqlArgs(params, valueArray);
|
ProviderUtil.setSqlArgs(params, valueArray);
|
||||||
|
|
||||||
@ -170,8 +175,9 @@ public class RowSqlProvider {
|
|||||||
String schema = ProviderUtil.getSchemaName(params);
|
String schema = ProviderUtil.getSchemaName(params);
|
||||||
String tableName = ProviderUtil.getTableName(params);
|
String tableName = ProviderUtil.getTableName(params);
|
||||||
Row row = ProviderUtil.getRow(params);
|
Row row = ProviderUtil.getRow(params);
|
||||||
|
String sql = DialectFactory.getDialect().forUpdateById(schema, tableName, row);
|
||||||
ProviderUtil.setSqlArgs(params, RowCPI.obtainAllModifyValues(row));
|
ProviderUtil.setSqlArgs(params, RowCPI.obtainAllModifyValues(row));
|
||||||
return DialectFactory.getDialect().forUpdateById(schema, tableName, row);
|
return sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -216,12 +222,14 @@ public class RowSqlProvider {
|
|||||||
String schema = ProviderUtil.getSchemaName(params);
|
String schema = ProviderUtil.getSchemaName(params);
|
||||||
String tableName = ProviderUtil.getTableName(params);
|
String tableName = ProviderUtil.getTableName(params);
|
||||||
|
|
||||||
|
String sql = DialectFactory.getDialect().forUpdateBatchById(schema, tableName, rows);
|
||||||
|
|
||||||
Object[] values = FlexConsts.EMPTY_ARRAY;
|
Object[] values = FlexConsts.EMPTY_ARRAY;
|
||||||
for (Row row : rows) {
|
for (Row row : rows) {
|
||||||
values = ArrayUtil.concat(values, RowCPI.obtainAllModifyValues(row));
|
values = ArrayUtil.concat(values, RowCPI.obtainAllModifyValues(row));
|
||||||
}
|
}
|
||||||
ProviderUtil.setSqlArgs(params, values);
|
ProviderUtil.setSqlArgs(params, values);
|
||||||
return DialectFactory.getDialect().forUpdateBatchById(schema, tableName, rows);
|
return sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -242,6 +250,8 @@ public class RowSqlProvider {
|
|||||||
// 执行 onUpdate 监听器
|
// 执行 onUpdate 监听器
|
||||||
tableInfo.invokeOnUpdateListener(entity);
|
tableInfo.invokeOnUpdateListener(entity);
|
||||||
|
|
||||||
|
String sql = DialectFactory.getDialect().forUpdateEntity(tableInfo, entity, false);
|
||||||
|
|
||||||
Object[] updateValues = tableInfo.buildUpdateSqlArgs(entity, false, false);
|
Object[] updateValues = tableInfo.buildUpdateSqlArgs(entity, false, false);
|
||||||
Object[] primaryValues = tableInfo.buildPkSqlArgs(entity);
|
Object[] primaryValues = tableInfo.buildPkSqlArgs(entity);
|
||||||
Object[] tenantIdArgs = tableInfo.buildTenantIdArgs();
|
Object[] tenantIdArgs = tableInfo.buildTenantIdArgs();
|
||||||
@ -249,8 +259,7 @@ public class RowSqlProvider {
|
|||||||
FlexAssert.assertAreNotNull(primaryValues, "The value of primary key must not be null, entity[%s]", entity);
|
FlexAssert.assertAreNotNull(primaryValues, "The value of primary key must not be null, entity[%s]", entity);
|
||||||
|
|
||||||
ProviderUtil.setSqlArgs(params, ArrayUtil.concat(updateValues, primaryValues, tenantIdArgs));
|
ProviderUtil.setSqlArgs(params, ArrayUtil.concat(updateValues, primaryValues, tenantIdArgs));
|
||||||
|
return sql;
|
||||||
return DialectFactory.getDialect().forUpdateEntity(tableInfo, entity, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -289,9 +298,10 @@ public class RowSqlProvider {
|
|||||||
String[] primaryKeys = ProviderUtil.getPrimaryKeys(params);
|
String[] primaryKeys = ProviderUtil.getPrimaryKeys(params);
|
||||||
Object[] primaryValues = ProviderUtil.getPrimaryValues(params);
|
Object[] primaryValues = ProviderUtil.getPrimaryValues(params);
|
||||||
|
|
||||||
|
String sql = DialectFactory.getDialect().forSelectOneById(schema, tableName, primaryKeys, primaryValues);
|
||||||
ProviderUtil.setSqlArgs(params, primaryValues);
|
ProviderUtil.setSqlArgs(params, primaryValues);
|
||||||
|
|
||||||
return DialectFactory.getDialect().forSelectOneById(schema, tableName, primaryKeys, primaryValues);
|
return sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -161,32 +161,6 @@ public class Row extends LinkedHashMap<String, Object> implements UpdateWrapper
|
|||||||
return (Row) UpdateWrapper.super.setRaw(property, value, isEffective);
|
return (Row) UpdateWrapper.super.setRaw(property, value, isEffective);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*@Override
|
|
||||||
public Row set(String column, Object value) {
|
|
||||||
if (StringUtil.isBlank(column)) {
|
|
||||||
throw new IllegalArgumentException("key column not be null or empty.");
|
|
||||||
}
|
|
||||||
|
|
||||||
SqlUtil.keepColumnSafely(column);
|
|
||||||
|
|
||||||
if (value instanceof QueryWrapper || value instanceof QueryCondition || value instanceof QueryColumn) {
|
|
||||||
setRaw(column, value);
|
|
||||||
} else {
|
|
||||||
super.put(column, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Row set(QueryColumn queryColumn, Object value) {
|
|
||||||
if (value instanceof QueryWrapper || value instanceof QueryCondition || value instanceof QueryColumn) {
|
|
||||||
setRaw(queryColumn, value);
|
|
||||||
} else {
|
|
||||||
super.put(queryColumn.getName(), value);
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Row set(String property, Object value) {
|
public Row set(String property, Object value) {
|
||||||
|
|||||||
@ -24,6 +24,9 @@ import com.mybatisflex.core.query.QueryWrapper;
|
|||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author michael
|
||||||
|
*/
|
||||||
public class RawValue implements Serializable {
|
public class RawValue implements Serializable {
|
||||||
|
|
||||||
private Object object;
|
private Object object;
|
||||||
|
|||||||
@ -20,100 +20,45 @@ import com.mybatisflex.core.audit.AuditManager;
|
|||||||
import com.mybatisflex.core.audit.ConsoleMessageCollector;
|
import com.mybatisflex.core.audit.ConsoleMessageCollector;
|
||||||
import com.mybatisflex.core.row.Db;
|
import com.mybatisflex.core.row.Db;
|
||||||
import com.mybatisflex.core.row.Row;
|
import com.mybatisflex.core.row.Row;
|
||||||
import com.mybatisflex.core.row.RowKey;
|
|
||||||
import com.mybatisflex.core.row.RowUtil;
|
import com.mybatisflex.core.row.RowUtil;
|
||||||
|
import org.apache.ibatis.logging.stdout.StdOutImpl;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Test;
|
||||||
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
|
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
|
||||||
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
|
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
import static com.mybatisflex.test.table.AccountTableDef.ACCOUNT;
|
|
||||||
|
|
||||||
public class RowTestStarter {
|
public class RowTestStarter {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
@BeforeClass
|
||||||
|
public static void init() {
|
||||||
DataSource dataSource = new EmbeddedDatabaseBuilder()
|
DataSource dataSource = new EmbeddedDatabaseBuilder()
|
||||||
.setType(EmbeddedDatabaseType.H2)
|
.setType(EmbeddedDatabaseType.H2)
|
||||||
.addScript("schema.sql")
|
.addScript("schema.sql")
|
||||||
.addScript("data.sql")
|
.addScript("data.sql")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
MybatisFlexBootstrap bootstrap = MybatisFlexBootstrap.getInstance()
|
MybatisFlexBootstrap.getInstance()
|
||||||
.setDataSource(dataSource)
|
.setDataSource(dataSource)
|
||||||
// .setLogImpl(StdOutImpl.class)
|
.setLogImpl(StdOutImpl.class)
|
||||||
.start();
|
.start();
|
||||||
|
|
||||||
AuditManager.setAuditEnable(true);
|
AuditManager.setAuditEnable(true);
|
||||||
AuditManager.setMessageCollector(new ConsoleMessageCollector());
|
AuditManager.setMessageCollector(new ConsoleMessageCollector());
|
||||||
|
}
|
||||||
// Page<Row> rowPage = Db.paginate("flex","tb_account", 1, 10, QueryWrapper.create().hint("USE_MERGE"));
|
|
||||||
// System.out.println(rowPage);
|
|
||||||
|
|
||||||
|
|
||||||
//查询 ID 为 1 的数据
|
@Test
|
||||||
// Row row = Db.selectOneById("tb_account", "id", 1);
|
public void testSetRaw(){
|
||||||
// System.out.println(row);
|
Row row = new Row();
|
||||||
|
row.set("user_name","michael");
|
||||||
|
row.setRaw("birthday","now()");
|
||||||
// QueryWrapper query = new QueryWrapper();
|
|
||||||
// query.select().from(ACCOUNT).leftJoin(ARTICLE).on(ACCOUNT.ID.eq(ARTICLE.ACCOUNT_ID));
|
|
||||||
// List<Row> rows = Db.selectListByQuery(query);
|
|
||||||
// RowUtil.printPretty(rows);
|
|
||||||
//
|
|
||||||
// System.out.println("--------");
|
|
||||||
//
|
|
||||||
// List<Account> accounts = RowUtil.toEntityList(rows, Account.class,0);
|
|
||||||
// System.out.println(accounts);
|
|
||||||
//
|
|
||||||
// List<Article> articles = RowUtil.toEntityList(rows, Article.class, 1);
|
|
||||||
// System.out.println(articles);
|
|
||||||
|
|
||||||
|
|
||||||
List<Row> rowList = new ArrayList<>();
|
|
||||||
for (int i = 0; i < 10; i++) {
|
|
||||||
Row row = Row.ofKey(RowKey.AUTO);
|
|
||||||
row.set(ACCOUNT.USER_NAME, "zhang" + i);
|
|
||||||
row.set(ACCOUNT.AGE, 18);
|
|
||||||
rowList.add(row);
|
|
||||||
}
|
|
||||||
|
|
||||||
Db.insertBatch("tb_account", rowList);
|
|
||||||
|
|
||||||
for (Row row : rowList) {
|
|
||||||
System.out.println(">>>>>>>id: " + row.get("id"));
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Row> rows1 = Db.selectAll("tb_account");
|
|
||||||
RowUtil.printPretty(rows1);
|
|
||||||
|
|
||||||
System.out.println("//////update....");
|
|
||||||
|
|
||||||
Row row = Row.ofKey("id", 5);
|
|
||||||
row.setRaw("age", "age + 5");
|
|
||||||
Db.updateById("tb_account", row);
|
|
||||||
|
|
||||||
Row row1 = Db.selectOneById("tb_account", "id", 5);
|
|
||||||
RowUtil.printPretty(row1);
|
|
||||||
|
|
||||||
|
|
||||||
System.out.println("////////////insert");
|
|
||||||
List<Row> rowList1 = Db.selectAll("tb_account");
|
|
||||||
rowList1.forEach(new Consumer<Row>() {
|
|
||||||
@Override
|
|
||||||
public void accept(Row row) {
|
|
||||||
row.remove("ID");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Db.insertBatch("tb_account", rowList1);
|
|
||||||
|
|
||||||
List<Row> rowList2 = Db.selectAll("tb_account");
|
|
||||||
RowUtil.printPretty(rowList2);
|
|
||||||
|
|
||||||
|
|
||||||
|
Db.insert("tb_account",row);
|
||||||
|
List<Row> rowList = Db.selectAll("tb_account");
|
||||||
|
RowUtil.printPretty(rowList);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user