DataSource增加清空表clear和删除表drop的系列方法
This commit is contained in:
@@ -218,6 +218,46 @@ public class DataJdbcSource extends DataSqlSource<Connection> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> CompletableFuture<Integer> clearDB(EntityInfo<T> info, String sql) {
|
||||
Connection conn = null;
|
||||
try {
|
||||
conn = writePool.poll();
|
||||
conn.setReadOnly(false);
|
||||
conn.setAutoCommit(true);
|
||||
final Statement stmt = conn.createStatement();
|
||||
int c = stmt.executeUpdate(sql);
|
||||
stmt.close();
|
||||
return CompletableFuture.completedFuture(c);
|
||||
} catch (SQLException e) {
|
||||
CompletableFuture future = new CompletableFuture();
|
||||
future.completeExceptionally(e);
|
||||
return future;
|
||||
} finally {
|
||||
if (conn != null) writePool.offerConnection(conn);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> CompletableFuture<Integer> dropDB(EntityInfo<T> info, String sql) {
|
||||
Connection conn = null;
|
||||
try {
|
||||
conn = writePool.poll();
|
||||
conn.setReadOnly(false);
|
||||
conn.setAutoCommit(true);
|
||||
final Statement stmt = conn.createStatement();
|
||||
int c = stmt.executeUpdate(sql);
|
||||
stmt.close();
|
||||
return CompletableFuture.completedFuture(c);
|
||||
} catch (SQLException e) {
|
||||
CompletableFuture future = new CompletableFuture();
|
||||
future.completeExceptionally(e);
|
||||
return future;
|
||||
} finally {
|
||||
if (conn != null) writePool.offerConnection(conn);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> CompletableFuture<Integer> updateDB(EntityInfo<T> info, T... values) {
|
||||
Connection conn = null;
|
||||
|
||||
@@ -93,6 +93,16 @@ public class DataMemorySource extends DataSqlSource<Void> {
|
||||
return CompletableFuture.completedFuture(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> CompletableFuture<Integer> clearDB(EntityInfo<T> info, String sql) {
|
||||
return CompletableFuture.completedFuture(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> CompletableFuture<Integer> dropDB(EntityInfo<T> info, String sql) {
|
||||
return CompletableFuture.completedFuture(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> CompletableFuture<Integer> updateDB(EntityInfo<T> info, T... values) {
|
||||
return CompletableFuture.completedFuture(0);
|
||||
|
||||
@@ -37,7 +37,7 @@ public interface DataSource {
|
||||
*
|
||||
* @param <T> 泛型
|
||||
* @param values Entity对象
|
||||
*
|
||||
*
|
||||
* @return 影响的记录条数
|
||||
*/
|
||||
public <T> int insert(final T... values);
|
||||
@@ -151,6 +151,100 @@ public interface DataSource {
|
||||
*/
|
||||
public <T> CompletableFuture<Integer> deleteAsync(final Class<T> clazz, final Flipper flipper, final FilterNode node);
|
||||
|
||||
//------------------------clearAsync---------------------------
|
||||
/**
|
||||
* 清空表 <br>
|
||||
* 等价SQL: TRUNCATE TABLE {table}<br>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
* @param clazz Entity类
|
||||
*
|
||||
* @return 影响的记录条数
|
||||
*/
|
||||
public <T> int clear(final Class<T> clazz);
|
||||
|
||||
/**
|
||||
* 清空表 <br>
|
||||
* 等价SQL: TRUNCATE TABLE {table}<br>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
* @param clazz Entity类
|
||||
*
|
||||
* @return 影响的记录条数CompletableFuture
|
||||
*/
|
||||
public <T> CompletableFuture<Integer> clearAsync(final Class<T> clazz);
|
||||
|
||||
/**
|
||||
* 清空表 <br>
|
||||
* 等价SQL: TRUNCATE TABLE {table}<br>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
* @param clazz Entity类
|
||||
* @param node 过滤条件
|
||||
*
|
||||
* @return 影响的记录条数
|
||||
*/
|
||||
public <T> int clear(final Class<T> clazz, final FilterNode node);
|
||||
|
||||
/**
|
||||
* 清空表 <br>
|
||||
* 等价SQL: TRUNCATE TABLE {table}<br>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
* @param clazz Entity类
|
||||
* @param node 过滤条件
|
||||
*
|
||||
* @return 影响的记录条数CompletableFuture
|
||||
*/
|
||||
public <T> CompletableFuture<Integer> clearAsync(final Class<T> clazz, final FilterNode node);
|
||||
|
||||
//------------------------dropAsync---------------------------
|
||||
/**
|
||||
* 删除表 <br>
|
||||
* 等价SQL: DROP TABLE {table}<br>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
* @param clazz Entity类
|
||||
*
|
||||
* @return 影响的记录条数
|
||||
*/
|
||||
public <T> int drop(final Class<T> clazz);
|
||||
|
||||
/**
|
||||
* 删除表 <br>
|
||||
* 等价SQL: DROP TABLE {table}<br>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
* @param clazz Entity类
|
||||
*
|
||||
* @return 影响的记录条数CompletableFuture
|
||||
*/
|
||||
public <T> CompletableFuture<Integer> dropAsync(final Class<T> clazz);
|
||||
|
||||
/**
|
||||
* 删除表 <br>
|
||||
* 等价SQL: DROP TABLE {table}<br>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
* @param clazz Entity类
|
||||
* @param node 过滤条件
|
||||
*
|
||||
* @return 影响的记录条数
|
||||
*/
|
||||
public <T> int drop(final Class<T> clazz, final FilterNode node);
|
||||
|
||||
/**
|
||||
* 删除表 <br>
|
||||
* 等价SQL: DROP TABLE {table}<br>
|
||||
*
|
||||
* @param <T> Entity泛型
|
||||
* @param clazz Entity类
|
||||
* @param node 过滤条件
|
||||
*
|
||||
* @return 影响的记录条数CompletableFuture
|
||||
*/
|
||||
public <T> CompletableFuture<Integer> dropAsync(final Class<T> clazz, final FilterNode node);
|
||||
|
||||
//------------------------updateAsync---------------------------
|
||||
/**
|
||||
* 更新记录, 多对象必须是同一个Entity类且必须在同一张表中 <br>
|
||||
|
||||
@@ -133,6 +133,12 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
|
||||
//删除记录
|
||||
protected abstract <T> CompletableFuture<Integer> deleteDB(final EntityInfo<T> info, Flipper flipper, final String sql);
|
||||
|
||||
//清空表
|
||||
protected abstract <T> CompletableFuture<Integer> clearDB(final EntityInfo<T> info, final String sql);
|
||||
|
||||
//删除表
|
||||
protected abstract <T> CompletableFuture<Integer> dropDB(final EntityInfo<T> info, final String sql);
|
||||
|
||||
//更新纪录
|
||||
protected abstract <T> CompletableFuture<Integer> updateDB(final EntityInfo<T> info, T... values);
|
||||
|
||||
@@ -510,6 +516,122 @@ public abstract class DataSqlSource<DBChannel> extends AbstractService implement
|
||||
return deleteDB(info, flipper, sql);
|
||||
}
|
||||
|
||||
//----------------------------- clearCompose -----------------------------
|
||||
@Override
|
||||
public <T> int clear(Class<T> clazz) {
|
||||
return clear(clazz, (FilterNode) null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> int clear(Class<T> clazz, FilterNode node) {
|
||||
final EntityInfo<T> info = loadEntityInfo(clazz);
|
||||
if (isOnlyCache(info)) return clearCache(info, node);
|
||||
return DataSqlSource.this.clearCompose(info, node).whenComplete((rs, t) -> {
|
||||
if (t != null) {
|
||||
futureCompleteConsumer.accept(rs, t);
|
||||
} else {
|
||||
clearCache(info, node);
|
||||
}
|
||||
}).join();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> CompletableFuture<Integer> clearAsync(final Class<T> clazz) {
|
||||
return clearAsync(clazz, (FilterNode) null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> CompletableFuture<Integer> clearAsync(final Class<T> clazz, FilterNode node) {
|
||||
final EntityInfo<T> info = loadEntityInfo(clazz);
|
||||
if (isOnlyCache(info)) {
|
||||
return CompletableFuture.supplyAsync(() -> clearCache(info, node), getExecutor());
|
||||
}
|
||||
if (isAsync()) return DataSqlSource.this.clearCompose(info, node).whenComplete((rs, t) -> {
|
||||
if (t != null) {
|
||||
futureCompleteConsumer.accept(rs, t);
|
||||
} else {
|
||||
clearCache(info, node);
|
||||
}
|
||||
});
|
||||
return CompletableFuture.supplyAsync(() -> DataSqlSource.this.clearCompose(info, node).join(), getExecutor()).whenComplete((rs, t) -> {
|
||||
if (t != null) {
|
||||
futureCompleteConsumer.accept(rs, t);
|
||||
} else {
|
||||
clearCache(info, node);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected <T> CompletableFuture<Integer> clearCompose(final EntityInfo<T> info, final FilterNode node) {
|
||||
String sql = "TRUNCATE TABLE " + info.getTable(node);
|
||||
if (info.isLoggable(logger, Level.FINEST, sql)) logger.finest(info.getType().getSimpleName() + " clear sql=" + sql);
|
||||
return clearDB(info, sql);
|
||||
}
|
||||
|
||||
//----------------------------- dropCompose -----------------------------
|
||||
@Override
|
||||
public <T> int drop(Class<T> clazz) {
|
||||
return drop(clazz, (FilterNode) null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> int drop(Class<T> clazz, FilterNode node) {
|
||||
final EntityInfo<T> info = loadEntityInfo(clazz);
|
||||
if (isOnlyCache(info)) return dropCache(info, node);
|
||||
return DataSqlSource.this.dropCompose(info, node).whenComplete((rs, t) -> {
|
||||
if (t != null) {
|
||||
futureCompleteConsumer.accept(rs, t);
|
||||
} else {
|
||||
dropCache(info, node);
|
||||
}
|
||||
}).join();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> CompletableFuture<Integer> dropAsync(final Class<T> clazz) {
|
||||
return dropAsync(clazz, (FilterNode) null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> CompletableFuture<Integer> dropAsync(final Class<T> clazz, FilterNode node) {
|
||||
final EntityInfo<T> info = loadEntityInfo(clazz);
|
||||
if (isOnlyCache(info)) {
|
||||
return CompletableFuture.supplyAsync(() -> dropCache(info, node), getExecutor());
|
||||
}
|
||||
if (isAsync()) return DataSqlSource.this.dropCompose(info, node).whenComplete((rs, t) -> {
|
||||
if (t != null) {
|
||||
futureCompleteConsumer.accept(rs, t);
|
||||
} else {
|
||||
dropCache(info, node);
|
||||
}
|
||||
});
|
||||
return CompletableFuture.supplyAsync(() -> DataSqlSource.this.dropCompose(info, node).join(), getExecutor()).whenComplete((rs, t) -> {
|
||||
if (t != null) {
|
||||
futureCompleteConsumer.accept(rs, t);
|
||||
} else {
|
||||
dropCache(info, node);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected <T> CompletableFuture<Integer> dropCompose(final EntityInfo<T> info, final FilterNode node) {
|
||||
String sql = "DROP TABLE " + info.getTable(node);
|
||||
if (info.isLoggable(logger, Level.FINEST, sql)) logger.finest(info.getType().getSimpleName() + " drop sql=" + sql);
|
||||
return dropDB(info, sql);
|
||||
}
|
||||
|
||||
protected <T> int clearCache(final EntityInfo<T> info, FilterNode node) {
|
||||
final EntityCache<T> cache = info.getCache();
|
||||
if (cache == null) return -1;
|
||||
return cache.clear();
|
||||
}
|
||||
|
||||
protected <T> int dropCache(final EntityInfo<T> info, FilterNode node) {
|
||||
final EntityCache<T> cache = info.getCache();
|
||||
if (cache == null) return -1;
|
||||
return cache.drop();
|
||||
}
|
||||
|
||||
protected <T> int deleteCache(final EntityInfo<T> info, int count, Flipper flipper, FilterNode node) {
|
||||
final EntityCache<T> cache = info.getCache();
|
||||
if (cache == null) return -1;
|
||||
|
||||
@@ -144,7 +144,7 @@ public final class EntityCache<T> {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
public int clear() {
|
||||
this.fullloaded = false;
|
||||
this.list = new ConcurrentLinkedQueue();
|
||||
this.map = new ConcurrentHashMap();
|
||||
@@ -152,6 +152,7 @@ public final class EntityCache<T> {
|
||||
this.scheduler.shutdownNow();
|
||||
this.scheduler = null;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
public boolean isFullLoaded() {
|
||||
@@ -479,6 +480,10 @@ public final class EntityCache<T> {
|
||||
return ids;
|
||||
}
|
||||
|
||||
public int drop() {
|
||||
return clear();
|
||||
}
|
||||
|
||||
public int update(final T value) {
|
||||
if (value == null) return 0;
|
||||
T rs = this.map.get(this.primary.get(value));
|
||||
|
||||
Reference in New Issue
Block a user