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
|
||||
public String forInsertRow(String schema, String tableName, Row row) {
|
||||
StringBuilder fields = new StringBuilder();
|
||||
StringBuilder questions = new StringBuilder();
|
||||
StringBuilder paramsOrPlaceholder = new StringBuilder();
|
||||
|
||||
Set<String> modifyAttrs = RowCPI.getModifyAttrs(row);
|
||||
int index = 0;
|
||||
for (String attr : modifyAttrs) {
|
||||
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) {
|
||||
fields.append(DELIMITER);
|
||||
questions.append(DELIMITER);
|
||||
paramsOrPlaceholder.append(DELIMITER);
|
||||
}
|
||||
index++;
|
||||
}
|
||||
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append(INSERT_INTO);
|
||||
if (StringUtil.isNotBlank(schema)) {
|
||||
@ -93,7 +100,7 @@ public class CommonsDialectImpl implements IDialect {
|
||||
}
|
||||
sql.append(wrap(getRealTable(tableName)));
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
@ -65,8 +65,11 @@ public class RowSqlProvider {
|
||||
String tableName = ProviderUtil.getTableName(params);
|
||||
String schema = ProviderUtil.getSchemaName(params);
|
||||
Row row = ProviderUtil.getRow(params);
|
||||
|
||||
// 先生成 SQL,再设置参数
|
||||
String sql = DialectFactory.getDialect().forInsertRow(schema, tableName, 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)));
|
||||
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[]{};
|
||||
for (Row row : rows) {
|
||||
values = ArrayUtil.concat(values, RowCPI.obtainModifyValues(row));
|
||||
}
|
||||
ProviderUtil.setSqlArgs(params, values);
|
||||
|
||||
//sql: INSERT INTO `tb_table`(`name`, `sex`) VALUES (?, ?),(?, ?),(?, ?)
|
||||
return DialectFactory.getDialect().forInsertBatchWithFirstRowColumns(schema, tableName, rows);
|
||||
return sql;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -115,9 +120,9 @@ public class RowSqlProvider {
|
||||
String tableName = ProviderUtil.getTableName(params);
|
||||
String[] primaryKeys = ProviderUtil.getPrimaryKeys(params);
|
||||
|
||||
String sql = DialectFactory.getDialect().forDeleteById(schema, tableName, primaryKeys);
|
||||
ProviderUtil.setSqlArgs(params, primaryValues);
|
||||
|
||||
return DialectFactory.getDialect().forDeleteById(schema, tableName, primaryKeys);
|
||||
return sql;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -133,8 +138,9 @@ public class RowSqlProvider {
|
||||
String[] primaryKeys = ProviderUtil.getPrimaryKeys(params);
|
||||
Object[] primaryValues = ProviderUtil.getPrimaryValues(params);
|
||||
|
||||
String sql = DialectFactory.getDialect().forDeleteBatchByIds(schema, tableName, primaryKeys, primaryValues);
|
||||
ProviderUtil.setSqlArgs(params, primaryValues);
|
||||
return DialectFactory.getDialect().forDeleteBatchByIds(schema, tableName, primaryKeys, primaryValues);
|
||||
return sql;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -152,7 +158,6 @@ public class RowSqlProvider {
|
||||
|
||||
//优先构建 sql,再构建参数
|
||||
String sql = DialectFactory.getDialect().forDeleteByQuery(queryWrapper);
|
||||
|
||||
Object[] valueArray = CPI.getValueArray(queryWrapper);
|
||||
ProviderUtil.setSqlArgs(params, valueArray);
|
||||
|
||||
@ -170,8 +175,9 @@ public class RowSqlProvider {
|
||||
String schema = ProviderUtil.getSchemaName(params);
|
||||
String tableName = ProviderUtil.getTableName(params);
|
||||
Row row = ProviderUtil.getRow(params);
|
||||
String sql = DialectFactory.getDialect().forUpdateById(schema, tableName, 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 tableName = ProviderUtil.getTableName(params);
|
||||
|
||||
String sql = DialectFactory.getDialect().forUpdateBatchById(schema, tableName, rows);
|
||||
|
||||
Object[] values = FlexConsts.EMPTY_ARRAY;
|
||||
for (Row row : rows) {
|
||||
values = ArrayUtil.concat(values, RowCPI.obtainAllModifyValues(row));
|
||||
}
|
||||
ProviderUtil.setSqlArgs(params, values);
|
||||
return DialectFactory.getDialect().forUpdateBatchById(schema, tableName, rows);
|
||||
return sql;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -242,6 +250,8 @@ public class RowSqlProvider {
|
||||
// 执行 onUpdate 监听器
|
||||
tableInfo.invokeOnUpdateListener(entity);
|
||||
|
||||
String sql = DialectFactory.getDialect().forUpdateEntity(tableInfo, entity, false);
|
||||
|
||||
Object[] updateValues = tableInfo.buildUpdateSqlArgs(entity, false, false);
|
||||
Object[] primaryValues = tableInfo.buildPkSqlArgs(entity);
|
||||
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);
|
||||
|
||||
ProviderUtil.setSqlArgs(params, ArrayUtil.concat(updateValues, primaryValues, tenantIdArgs));
|
||||
|
||||
return DialectFactory.getDialect().forUpdateEntity(tableInfo, entity, false);
|
||||
return sql;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -289,9 +298,10 @@ public class RowSqlProvider {
|
||||
String[] primaryKeys = ProviderUtil.getPrimaryKeys(params);
|
||||
Object[] primaryValues = ProviderUtil.getPrimaryValues(params);
|
||||
|
||||
String sql = DialectFactory.getDialect().forSelectOneById(schema, tableName, primaryKeys, 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);
|
||||
}
|
||||
|
||||
/*@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
|
||||
public Row set(String property, Object value) {
|
||||
|
||||
@ -24,6 +24,9 @@ import com.mybatisflex.core.query.QueryWrapper;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author michael
|
||||
*/
|
||||
public class RawValue implements Serializable {
|
||||
|
||||
private Object object;
|
||||
|
||||
@ -20,100 +20,45 @@ import com.mybatisflex.core.audit.AuditManager;
|
||||
import com.mybatisflex.core.audit.ConsoleMessageCollector;
|
||||
import com.mybatisflex.core.row.Db;
|
||||
import com.mybatisflex.core.row.Row;
|
||||
import com.mybatisflex.core.row.RowKey;
|
||||
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.EmbeddedDatabaseType;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import static com.mybatisflex.test.table.AccountTableDef.ACCOUNT;
|
||||
|
||||
public class RowTestStarter {
|
||||
|
||||
public static void main(String[] args) {
|
||||
@BeforeClass
|
||||
public static void init() {
|
||||
DataSource dataSource = new EmbeddedDatabaseBuilder()
|
||||
.setType(EmbeddedDatabaseType.H2)
|
||||
.addScript("schema.sql")
|
||||
.addScript("data.sql")
|
||||
.build();
|
||||
|
||||
MybatisFlexBootstrap bootstrap = MybatisFlexBootstrap.getInstance()
|
||||
MybatisFlexBootstrap.getInstance()
|
||||
.setDataSource(dataSource)
|
||||
// .setLogImpl(StdOutImpl.class)
|
||||
.setLogImpl(StdOutImpl.class)
|
||||
.start();
|
||||
|
||||
AuditManager.setAuditEnable(true);
|
||||
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 的数据
|
||||
// Row row = Db.selectOneById("tb_account", "id", 1);
|
||||
// System.out.println(row);
|
||||
|
||||
|
||||
// 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);
|
||||
|
||||
@Test
|
||||
public void testSetRaw(){
|
||||
Row row = new Row();
|
||||
row.set("user_name","michael");
|
||||
row.setRaw("birthday","now()");
|
||||
|
||||
Db.insert("tb_account",row);
|
||||
List<Row> rowList = Db.selectAll("tb_account");
|
||||
RowUtil.printPretty(rowList);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user