From 06efe3f5c38ab78718c5840acdab29e110c6c6b5 Mon Sep 17 00:00:00 2001 From: redkale Date: Tue, 25 Jul 2023 12:46:20 +0800 Subject: [PATCH] =?UTF-8?q?DataBatch=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../redkale/source/AbstractDataSource.java | 36 +++++++++++++++++++ .../redkale/source/AbstractDataSqlSource.java | 23 +----------- .../java/org/redkale/source/DataBatch.java | 9 ++++- .../org/redkale/source/DataJdbcSource.java | 8 +---- 4 files changed, 46 insertions(+), 30 deletions(-) diff --git a/src/main/java/org/redkale/source/AbstractDataSource.java b/src/main/java/org/redkale/source/AbstractDataSource.java index 7a4d75fce..55d109710 100644 --- a/src/main/java/org/redkale/source/AbstractDataSource.java +++ b/src/main/java/org/redkale/source/AbstractDataSource.java @@ -1294,6 +1294,18 @@ public abstract class AbstractDataSource extends AbstractService implements Data return this; } + @Override //entitys不一定是同一表的数据 + public DataBatch insert(Collection entitys) { + for (T t : entitys) { + Objects.requireNonNull(t); + if (t.getClass().getAnnotation(Entity.class) == null) { + throw new SourceException("Entity Class " + t.getClass() + " must be on Annotation @Entity"); + } + this.actions.add(new InsertBatchAction1(t)); + } + return this; + } + @Override //entitys不一定是同一表的数据 public DataBatch delete(T... entitys) { for (T t : entitys) { @@ -1306,6 +1318,18 @@ public abstract class AbstractDataSource extends AbstractService implements Data return this; } + @Override //entitys不一定是同一表的数据 + public DataBatch delete(Collection entitys) { + for (T t : entitys) { + Objects.requireNonNull(t); + if (t.getClass().getAnnotation(Entity.class) == null) { + throw new SourceException("Entity Class " + t.getClass() + " must be on Annotation @Entity"); + } + this.actions.add(new DeleteBatchAction1(t)); + } + return this; + } + @Override public DataBatch delete(Class clazz, Serializable... pks) { Objects.requireNonNull(clazz); @@ -1349,6 +1373,18 @@ public abstract class AbstractDataSource extends AbstractService implements Data return this; } + @Override //entitys不一定是同一表的数据 + public DataBatch update(Collection entitys) { + for (T t : entitys) { + Objects.requireNonNull(t); + if (t.getClass().getAnnotation(Entity.class) == null) { + throw new SourceException("Entity Class " + t.getClass() + " must be on Annotation @Entity"); + } + this.actions.add(new UpdateBatchAction1(t)); + } + return this; + } + @Override public DataBatch update(Class clazz, Serializable pk, String column, Serializable value) { return update(clazz, pk, ColumnValue.mov(column, value)); diff --git a/src/main/java/org/redkale/source/AbstractDataSqlSource.java b/src/main/java/org/redkale/source/AbstractDataSqlSource.java index c11e6c868..2a38091c6 100644 --- a/src/main/java/org/redkale/source/AbstractDataSqlSource.java +++ b/src/main/java/org/redkale/source/AbstractDataSqlSource.java @@ -566,17 +566,14 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return null; } - @Local protected boolean isTableNotExist(EntityInfo info, String sqlCode) { return sqlCode != null && !sqlCode.isEmpty() && tableNotExistSqlstates.contains(';' + sqlCode + ';'); } - @Local protected String getTableCopySQL(EntityInfo info, String newTable) { return tablecopySQL.replace("#{newtable}", newTable).replace("#{oldtable}", info.table); } - @Local protected Serializable getSQLAttrValue(EntityInfo info, Attribute attr, Serializable val) { if (val != null && !(val instanceof Number) && !(val instanceof CharSequence) && !(val instanceof java.util.Date) && !val.getClass().getName().startsWith("java.sql.") && !val.getClass().getName().startsWith("java.time.")) { @@ -587,7 +584,6 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return val; } - @Local protected Map> getInsertQuestionPrepareInfo(EntityInfo info, T... entitys) { Map> map = new LinkedHashMap<>();//一定要是LinkedHashMap for (T entity : entitys) { @@ -597,7 +593,6 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return map; } - @Local protected Map> getInsertDollarPrepareInfo(EntityInfo info, T... entitys) { Map> map = new LinkedHashMap<>();//一定要是LinkedHashMap for (T entity : entitys) { @@ -607,7 +602,6 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return map; } - @Local protected Map> getUpdateQuestionPrepareInfo(EntityInfo info, T... entitys) { Map> map = new LinkedHashMap<>(); //一定要是LinkedHashMap for (T entity : entitys) { @@ -617,7 +611,6 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return map; } - @Local protected Map> getUpdateDollarPrepareInfo(EntityInfo info, T... entitys) { Map> map = new LinkedHashMap<>();//一定要是LinkedHashMap for (T entity : entitys) { @@ -627,7 +620,6 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return map; } - @Local protected Serializable getEntityAttrValue(EntityInfo info, Attribute attr, T entity) { Serializable val = info.getSQLValue(attr, entity); Class clazz = attr.type(); @@ -648,12 +640,11 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement } @Override - @Local + public void compile(Class clazz) { EntityInfo.compile(clazz, this); } - @Local public final String dbtype() { if (dbtype == null) { throw new NullPointerException("dbtype is null"); @@ -661,12 +652,10 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return dbtype; } - @Local public final boolean autoddl() { return autoDDL; } - //是否异步 protected abstract boolean isAsync(); @@ -801,7 +790,6 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return node == null ? null : node.createSQLExpress(this, info, joinTabalis); } - @Local @Override public String getType() { return "sql"; @@ -812,13 +800,11 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return name; } - @Local @Override public EntityInfo apply(Class t) { return loadEntityInfo(t); } - @Local @Override public void close() throws Exception { } @@ -2209,7 +2195,6 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return sql; } - @Local protected CompletableFuture> getNumberMapDBApply(EntityInfo info, CompletableFuture future, FilterFuncColumn... columns) { return future.thenApply((DataResultSet dataset) -> { final Map map = new HashMap<>(); @@ -2285,7 +2270,6 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return sql; } - @Local protected CompletableFuture getNumberResultDBApply(EntityInfo info, CompletableFuture future, Number defVal, String column) { return future.thenApply((DataResultSet dataset) -> { Number rs = defVal; @@ -2371,7 +2355,6 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return sql; } - @Local protected CompletableFuture> queryColumnMapDBApply(EntityInfo info, CompletableFuture future, final String keyColumn) { return future.thenApply((DataResultSet dataset) -> { Map rs = new LinkedHashMap<>(); @@ -2502,7 +2485,6 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return sql; } - @Local protected CompletableFuture> queryColumnMapDBApply(EntityInfo info, CompletableFuture future, final ColumnNode[] funcNodes, final String[] groupByColumns) { return future.thenApply((DataResultSet dataset) -> { Map rs = new LinkedHashMap<>(); @@ -2704,7 +2686,6 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return sql; } - @Local protected CompletableFuture findDBApply(EntityInfo info, CompletableFuture future, boolean onlypk, SelectColumn selects) { return future.thenApply((DataResultSet pgset) -> { T rs = pgset.next() ? (onlypk && selects == null ? getEntityValue(info, null, pgset) : getEntityValue(info, selects, pgset)) : null; @@ -2826,7 +2807,6 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return sql; } - @Local protected CompletableFuture findColumnDBApply(EntityInfo info, CompletableFuture future, boolean onlypk, String column, Serializable defValue) { return future.thenApply((DataResultSet dataset) -> { Serializable val = defValue; @@ -2954,7 +2934,6 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement return sql; } - @Local protected CompletableFuture existsDBApply(EntityInfo info, CompletableFuture future, boolean onlypk) { return future.thenApply((DataResultSet pgset) -> { boolean rs = pgset.next() ? (((Number) pgset.getObject(1)).intValue() > 0) : false; diff --git a/src/main/java/org/redkale/source/DataBatch.java b/src/main/java/org/redkale/source/DataBatch.java index 8cf6ce18f..ee7d098a1 100644 --- a/src/main/java/org/redkale/source/DataBatch.java +++ b/src/main/java/org/redkale/source/DataBatch.java @@ -4,6 +4,7 @@ package org.redkale.source; import java.io.Serializable; +import java.util.Collection; import org.redkale.util.SelectColumn; /** @@ -14,8 +15,8 @@ import org.redkale.util.SelectColumn; * 详情见: https://redkale.org * * @author zhangjx + * @since 2.8.0 */ -@SuppressWarnings("unchecked") public interface DataBatch { public static DataBatch create() { @@ -26,8 +27,12 @@ public interface DataBatch { public DataBatch insert(T... entitys); + public DataBatch insert(Collection entitys); + public DataBatch delete(T... entitys); + public DataBatch delete(Collection entitys); + public DataBatch delete(Class clazz, Serializable... pks); public DataBatch delete(Class clazz, FilterNode node); @@ -36,6 +41,8 @@ public interface DataBatch { public DataBatch update(T... entitys); + public DataBatch update(Collection entitys); + public DataBatch update(Class clazz, Serializable pk, String column, Serializable value); public DataBatch update(Class clazz, Serializable pk, ColumnValue... values); diff --git a/src/main/java/org/redkale/source/DataJdbcSource.java b/src/main/java/org/redkale/source/DataJdbcSource.java index 65c9cacd3..fdbfd46a0 100644 --- a/src/main/java/org/redkale/source/DataJdbcSource.java +++ b/src/main/java/org/redkale/source/DataJdbcSource.java @@ -87,7 +87,6 @@ public class DataJdbcSource extends AbstractDataSqlSource { } } - @Local @Override public void close() throws Exception { super.close(); @@ -112,12 +111,10 @@ public class DataJdbcSource extends AbstractDataSqlSource { return true; } - @Local protected ConnectionPool readPool() { return readPool; } - @Local protected ConnectionPool writePool() { return writePool; } @@ -491,7 +488,7 @@ public class DataJdbcSource extends AbstractDataSqlSource { if (info.getTableStrategy() == null) { //单库单表 conn.offerUpdateStatement(prestmt); prestmt = prepareInsertEntityStatement(conn, presql, info, entitys); - c = Utility.sum(prestmt.executeBatch());; + c = Utility.sum(prestmt.executeBatch()); conn.offerUpdateStatement(prestmt); } else { //分库分表 for (PreparedStatement stmt : prestmts) { @@ -2406,7 +2403,6 @@ public class DataJdbcSource extends AbstractDataSqlSource { * * @return 结果数组 */ - @Local @Override public int executeUpdate(String sql) { return executeUpdate(new String[]{sql})[0]; @@ -2420,7 +2416,6 @@ public class DataJdbcSource extends AbstractDataSqlSource { * * @return 结果数组 */ - @Local @Override public int[] executeUpdate(String... sqls) { if (sqls.length == 0) { @@ -2463,7 +2458,6 @@ public class DataJdbcSource extends AbstractDataSqlSource { * * @return 结果 */ - @Local @Override public V executeQuery(String sql, Function handler) { final long s = System.currentTimeMillis();