DataSqlSource优化
This commit is contained in:
@@ -3232,6 +3232,32 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement
|
||||
return querySheetDBAsync(info, readCache, needTotal, distinct, selects, flipper, node);
|
||||
}
|
||||
|
||||
//-------------------------------------------- native SQL --------------------------------------------
|
||||
@Override
|
||||
public <V> V nativeQuery(String sql, BiConsumer<Object, Object> consumer, Function<DataResultSet, V> handler, Map<String, Object> params) {
|
||||
return nativeQueryAsync(sql, consumer, handler, params).join();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <V> V nativeQuery(String sql, BiConsumer<Object, Object> consumer, Function<DataResultSet, V> handler) {
|
||||
return nativeQueryAsync(sql, consumer, handler).join();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int nativeUpdate(String sql, Map<String, Object> params) {
|
||||
return nativeUpdateAsync(sql, params).join();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int nativeUpdate(String sql) {
|
||||
return nativeUpdateAsync(sql).join();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] nativeUpdates(String... sqls) {
|
||||
return nativeUpdatesAsync(sqls).join();
|
||||
}
|
||||
|
||||
protected static class UpdateSqlInfo {
|
||||
|
||||
public String sql; //prepare-sql时表名参数只能是最后一个
|
||||
|
||||
@@ -2490,6 +2490,7 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
*
|
||||
* @return 结果数组
|
||||
*/
|
||||
@Local
|
||||
@Override
|
||||
public int[] nativeUpdates(String... sqls) {
|
||||
if (sqls.length == 0) {
|
||||
@@ -2530,11 +2531,13 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
*
|
||||
* @return 结果数组
|
||||
*/
|
||||
@Local
|
||||
@Override
|
||||
public int nativeUpdate(String sql) {
|
||||
return nativeUpdates(new String[]{sql})[0];
|
||||
}
|
||||
|
||||
@Local
|
||||
@Override
|
||||
public int nativeUpdate(String sql, Map<String, Object> params) {
|
||||
NativeSqlStatement sinfo = super.nativeParse(sql, params);
|
||||
@@ -2583,6 +2586,7 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
*
|
||||
* @return 结果
|
||||
*/
|
||||
@Local
|
||||
@Override
|
||||
public <V> V nativeQuery(String sql, BiConsumer<Object, Object> consumer, Function<DataResultSet, V> handler) {
|
||||
final long s = System.currentTimeMillis();
|
||||
@@ -2610,6 +2614,7 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
}
|
||||
}
|
||||
|
||||
@Local
|
||||
@Override
|
||||
public <V> V nativeQuery(String sql, BiConsumer<Object, Object> consumer, Function<DataResultSet, V> handler, Map<String, Object> params) {
|
||||
NativeSqlStatement sinfo = super.nativeParse(sql, params);
|
||||
@@ -2655,6 +2660,31 @@ public class DataJdbcSource extends AbstractDataSqlSource {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public <V> CompletableFuture<V> nativeQueryAsync(String sql, BiConsumer<Object, Object> consumer, Function<DataResultSet, V> handler, Map<String, Object> params) {
|
||||
return supplyAsync(() -> nativeQuery(sql, consumer, handler, params));
|
||||
}
|
||||
|
||||
@Override
|
||||
public <V> CompletableFuture<V> nativeQueryAsync(String sql, BiConsumer<Object, Object> consumer, Function<DataResultSet, V> handler) {
|
||||
return supplyAsync(() -> nativeQuery(sql, consumer, handler));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Integer> nativeUpdateAsync(String sql, Map<String, Object> params) {
|
||||
return supplyAsync(() -> nativeUpdate(sql, params));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Integer> nativeUpdateAsync(String sql) {
|
||||
return supplyAsync(() -> nativeUpdate(sql));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<int[]> nativeUpdatesAsync(String... sqls) {
|
||||
return supplyAsync(() -> nativeUpdates(sqls));
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public int directExecute(String sql) {
|
||||
return nativeUpdate(sql);
|
||||
|
||||
@@ -5,6 +5,7 @@ package org.redkale.source;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.function.*;
|
||||
import static org.redkale.source.DataResultSet.formatColumnValue;
|
||||
import org.redkale.util.Copier;
|
||||
@@ -30,6 +31,15 @@ public interface DataSqlSource extends DataSource {
|
||||
*/
|
||||
public int[] nativeUpdates(String... sqls);
|
||||
|
||||
/**
|
||||
* 执行多条原生无参数的sql
|
||||
*
|
||||
* @param sql 无参数的sql语句
|
||||
*
|
||||
* @return 执行条数
|
||||
*/
|
||||
public CompletableFuture<int[]> nativeUpdatesAsync(String... sqls);
|
||||
|
||||
/**
|
||||
* 执行原生无参数的sql
|
||||
*
|
||||
@@ -39,6 +49,15 @@ public interface DataSqlSource extends DataSource {
|
||||
*/
|
||||
public int nativeUpdate(String sql);
|
||||
|
||||
/**
|
||||
* 执行原生无参数的sql
|
||||
*
|
||||
* @param sql 无参数的sql语句
|
||||
*
|
||||
* @return 执行条数
|
||||
*/
|
||||
public CompletableFuture<Integer> nativeUpdateAsync(String sql);
|
||||
|
||||
/**
|
||||
* 执行原生带参数的sql
|
||||
*
|
||||
@@ -49,6 +68,16 @@ public interface DataSqlSource extends DataSource {
|
||||
*/
|
||||
public int nativeUpdate(String sql, Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 执行原生带参数的sql
|
||||
*
|
||||
* @param sql 带参数的sql语句
|
||||
* @param params 参数值集合
|
||||
*
|
||||
* @return 执行条数
|
||||
*/
|
||||
public CompletableFuture<Integer> nativeUpdateAsync(String sql, Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 通过原生的sql查询结果
|
||||
*
|
||||
@@ -61,6 +90,18 @@ public interface DataSqlSource extends DataSource {
|
||||
*/
|
||||
public <V> V nativeQuery(String sql, BiConsumer<Object, Object> consumer, Function<DataResultSet, V> handler);
|
||||
|
||||
/**
|
||||
* 通过原生的sql查询结果
|
||||
*
|
||||
* @param <V> 泛型
|
||||
* @param sql 无参数的sql语句
|
||||
* @param consumer BiConsumer 参数1: connection, 参数2: statement
|
||||
* @param handler DataResultSet的回调函数
|
||||
*
|
||||
* @return 结果对象
|
||||
*/
|
||||
public <V> CompletableFuture<V> nativeQueryAsync(String sql, BiConsumer<Object, Object> consumer, Function<DataResultSet, V> handler);
|
||||
|
||||
/**
|
||||
* 通过原生带参数的sql查询结果
|
||||
*
|
||||
@@ -74,11 +115,28 @@ public interface DataSqlSource extends DataSource {
|
||||
*/
|
||||
public <V> V nativeQuery(String sql, BiConsumer<Object, Object> consumer, Function<DataResultSet, V> handler, Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 通过原生带参数的sql查询结果
|
||||
*
|
||||
* @param <V> 泛型
|
||||
* @param sql 带参数的sql语句
|
||||
* @param consumer BiConsumer 参数1: connection, 参数2: statement
|
||||
* @param handler DataResultSet的回调函数
|
||||
* @param params 参数值集合
|
||||
*
|
||||
* @return 结果对象
|
||||
*/
|
||||
public <V> CompletableFuture<V> nativeQueryAsync(String sql, BiConsumer<Object, Object> consumer, Function<DataResultSet, V> handler, Map<String, Object> params);
|
||||
|
||||
//----------------------------- 无参数 -----------------------------
|
||||
default <V> V nativeQuery(String sql, Function<DataResultSet, V> handler) {
|
||||
return nativeQuery(sql, null, handler);
|
||||
}
|
||||
|
||||
default <V> CompletableFuture<V> nativeQueryAsync(String sql, Function<DataResultSet, V> handler) {
|
||||
return nativeQueryAsync(sql, null, handler);
|
||||
}
|
||||
|
||||
default <V> V nativeQueryOne(Class<V> type, String sql) {
|
||||
return nativeQuery(sql, rset -> {
|
||||
if (!rset.next()) {
|
||||
@@ -92,6 +150,19 @@ public interface DataSqlSource extends DataSource {
|
||||
});
|
||||
}
|
||||
|
||||
default <V> CompletableFuture<V> nativeQueryOneAsync(Class<V> type, String sql) {
|
||||
return nativeQueryAsync(sql, rset -> {
|
||||
if (!rset.next()) {
|
||||
return null;
|
||||
}
|
||||
if (type == byte[].class || type == String.class || type.isPrimitive() || Number.class.isAssignableFrom(type)
|
||||
|| (!Map.class.isAssignableFrom(type) && type.getName().startsWith("java."))) {
|
||||
return (V) formatColumnValue(type, rset.getObject(1));
|
||||
}
|
||||
return EntityBuilder.load(type).getObjectValue(rset);
|
||||
});
|
||||
}
|
||||
|
||||
default <V> List<V> nativeQueryList(Class<V> type, String sql) {
|
||||
return nativeQuery(sql, rset -> {
|
||||
if (type == byte[].class || type == String.class || type.isPrimitive() || Number.class.isAssignableFrom(type)
|
||||
@@ -106,6 +177,20 @@ public interface DataSqlSource extends DataSource {
|
||||
});
|
||||
}
|
||||
|
||||
default <V> CompletableFuture<List<V>> nativeQueryListAsync(Class<V> type, String sql) {
|
||||
return nativeQueryAsync(sql, rset -> {
|
||||
if (type == byte[].class || type == String.class || type.isPrimitive() || Number.class.isAssignableFrom(type)
|
||||
|| (!Map.class.isAssignableFrom(type) && type.getName().startsWith("java."))) {
|
||||
List<V> list = new ArrayList<>();
|
||||
while (rset.next()) {
|
||||
list.add(rset.wasNull() ? null : (V) formatColumnValue(type, rset.getObject(1)));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
return EntityBuilder.load(type).getObjectList(rset);
|
||||
});
|
||||
}
|
||||
|
||||
default <K, V> Map<K, V> nativeQueryMap(Class<K> keyType, Class<V> valType, String sql) {
|
||||
return nativeQuery(sql, rset -> {
|
||||
Map<K, V> map = new LinkedHashMap<K, V>();
|
||||
@@ -118,19 +203,43 @@ public interface DataSqlSource extends DataSource {
|
||||
});
|
||||
}
|
||||
|
||||
default <K, V> CompletableFuture<Map<K, V>> nativeQueryMapAsync(Class<K> keyType, Class<V> valType, String sql) {
|
||||
return nativeQueryAsync(sql, rset -> {
|
||||
Map<K, V> map = new LinkedHashMap<K, V>();
|
||||
while (rset.next()) {
|
||||
if (!rset.wasNull()) {
|
||||
map.put((K) formatColumnValue(keyType, rset.getObject(1)), (V) formatColumnValue(valType, rset.getObject(2)));
|
||||
}
|
||||
}
|
||||
return map;
|
||||
});
|
||||
}
|
||||
|
||||
default Map<String, String> nativeQueryStrStrMap(String sql) {
|
||||
return nativeQueryMap(String.class, String.class, sql);
|
||||
}
|
||||
|
||||
default CompletableFuture<Map<String, String>> nativeQueryStrStrMapAsync(String sql) {
|
||||
return nativeQueryMapAsync(String.class, String.class, sql);
|
||||
}
|
||||
|
||||
default Map<Integer, String> nativeQueryIntStrMap(String sql) {
|
||||
return nativeQueryMap(Integer.class, String.class, sql);
|
||||
}
|
||||
|
||||
default CompletableFuture<Map<Integer, String>> nativeQueryIntStrMapAsync(String sql) {
|
||||
return nativeQueryMapAsync(Integer.class, String.class, sql);
|
||||
}
|
||||
|
||||
//----------------------------- Map<String, Object> -----------------------------
|
||||
default <V> V nativeQuery(String sql, Function<DataResultSet, V> handler, Map<String, Object> params) {
|
||||
return nativeQuery(sql, null, handler, params);
|
||||
}
|
||||
|
||||
default <V> CompletableFuture<V> nativeQueryAsync(String sql, Function<DataResultSet, V> handler, Map<String, Object> params) {
|
||||
return nativeQueryAsync(sql, null, handler, params);
|
||||
}
|
||||
|
||||
default <V> V nativeQueryOne(Class<V> type, String sql, Map<String, Object> params) {
|
||||
return nativeQuery(sql, rset -> {
|
||||
if (!rset.next()) {
|
||||
@@ -144,6 +253,19 @@ public interface DataSqlSource extends DataSource {
|
||||
}, params);
|
||||
}
|
||||
|
||||
default <V> CompletableFuture<V> nativeQueryOneAsync(Class<V> type, String sql, Map<String, Object> params) {
|
||||
return nativeQueryAsync(sql, rset -> {
|
||||
if (!rset.next()) {
|
||||
return null;
|
||||
}
|
||||
if (type == byte[].class || type == String.class || type.isPrimitive() || Number.class.isAssignableFrom(type)
|
||||
|| (!Map.class.isAssignableFrom(type) && type.getName().startsWith("java."))) {
|
||||
return (V) formatColumnValue(type, rset.getObject(1));
|
||||
}
|
||||
return EntityBuilder.load(type).getObjectValue(rset);
|
||||
}, params);
|
||||
}
|
||||
|
||||
default <V> List<V> nativeQueryList(Class<V> type, String sql, Map<String, Object> params) {
|
||||
return nativeQuery(sql, rset -> {
|
||||
if (type == byte[].class || type == String.class || type.isPrimitive() || Number.class.isAssignableFrom(type)
|
||||
@@ -158,6 +280,20 @@ public interface DataSqlSource extends DataSource {
|
||||
}, params);
|
||||
}
|
||||
|
||||
default <V> CompletableFuture<List<V>> nativeQueryListAsync(Class<V> type, String sql, Map<String, Object> params) {
|
||||
return nativeQueryAsync(sql, rset -> {
|
||||
if (type == byte[].class || type == String.class || type.isPrimitive() || Number.class.isAssignableFrom(type)
|
||||
|| (!Map.class.isAssignableFrom(type) && type.getName().startsWith("java."))) {
|
||||
List<V> list = new ArrayList<>();
|
||||
while (rset.next()) {
|
||||
list.add(rset.wasNull() ? null : (V) formatColumnValue(type, rset.getObject(1)));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
return EntityBuilder.load(type).getObjectList(rset);
|
||||
}, params);
|
||||
}
|
||||
|
||||
default <K, V> Map<K, V> nativeQueryMap(Class<K> keyType, Class<V> valType, String sql, Map<String, Object> params) {
|
||||
return nativeQuery(sql, rset -> {
|
||||
Map<K, V> map = new LinkedHashMap<K, V>();
|
||||
@@ -170,40 +306,88 @@ public interface DataSqlSource extends DataSource {
|
||||
}, params);
|
||||
}
|
||||
|
||||
default <K, V> CompletableFuture<Map<K, V>> nativeQueryMapAsync(Class<K> keyType, Class<V> valType, String sql, Map<String, Object> params) {
|
||||
return nativeQueryAsync(sql, rset -> {
|
||||
Map<K, V> map = new LinkedHashMap<K, V>();
|
||||
while (rset.next()) {
|
||||
if (!rset.wasNull()) {
|
||||
map.put((K) formatColumnValue(keyType, rset.getObject(1)), (V) formatColumnValue(valType, rset.getObject(2)));
|
||||
}
|
||||
}
|
||||
return map;
|
||||
}, params);
|
||||
}
|
||||
|
||||
default Map<String, String> nativeQueryStrStrMap(String sql, Map<String, Object> params) {
|
||||
return nativeQueryMap(String.class, String.class, sql, params);
|
||||
}
|
||||
|
||||
default CompletableFuture<Map<String, String>> nativeQueryStrStrMapAsync(String sql, Map<String, Object> params) {
|
||||
return nativeQueryMapAsync(String.class, String.class, sql, params);
|
||||
}
|
||||
|
||||
default Map<Integer, String> nativeQueryIntStrMap(String sql, Map<String, Object> params) {
|
||||
return nativeQueryMap(Integer.class, String.class, sql, params);
|
||||
}
|
||||
|
||||
default CompletableFuture<Map<Integer, String>> nativeQueryIntStrMapAsync(String sql, Map<String, Object> params) {
|
||||
return nativeQueryMapAsync(Integer.class, String.class, sql, params);
|
||||
}
|
||||
|
||||
//----------------------------- JavaBean -----------------------------
|
||||
default int nativeUpdate(String sql, Serializable bean) {
|
||||
return nativeUpdate(sql, (Map<String, Object>) Copier.copyToMap(bean, Copier.OPTION_SKIP_NULL_VALUE));
|
||||
}
|
||||
|
||||
default CompletableFuture<Integer> nativeUpdateAsync(String sql, Serializable bean) {
|
||||
return nativeUpdateAsync(sql, (Map<String, Object>) Copier.copyToMap(bean, Copier.OPTION_SKIP_NULL_VALUE));
|
||||
}
|
||||
|
||||
default <V> V nativeQuery(String sql, Function<DataResultSet, V> handler, Serializable bean) {
|
||||
return nativeQuery(sql, null, handler, (Map<String, Object>) Copier.copyToMap(bean, Copier.OPTION_SKIP_NULL_VALUE));
|
||||
}
|
||||
|
||||
default <V> CompletableFuture<V> nativeQueryAsync(String sql, Function<DataResultSet, V> handler, Serializable bean) {
|
||||
return nativeQueryAsync(sql, null, handler, (Map<String, Object>) Copier.copyToMap(bean, Copier.OPTION_SKIP_NULL_VALUE));
|
||||
}
|
||||
|
||||
default <V> V nativeQueryOne(Class<V> type, String sql, Serializable bean) {
|
||||
return nativeQueryOne(type, sql, (Map<String, Object>) Copier.copyToMap(bean, Copier.OPTION_SKIP_NULL_VALUE));
|
||||
}
|
||||
|
||||
default <V> CompletableFuture<V> nativeQueryOneAsync(Class<V> type, String sql, Serializable bean) {
|
||||
return nativeQueryOneAsync(type, sql, (Map<String, Object>) Copier.copyToMap(bean, Copier.OPTION_SKIP_NULL_VALUE));
|
||||
}
|
||||
|
||||
default <V> List<V> nativeQueryList(Class<V> type, String sql, Serializable bean) {
|
||||
return nativeQueryList(type, sql, (Map<String, Object>) Copier.copyToMap(bean, Copier.OPTION_SKIP_NULL_VALUE));
|
||||
}
|
||||
|
||||
default <V> CompletableFuture<List<V>> nativeQueryListAsync(Class<V> type, String sql, Serializable bean) {
|
||||
return nativeQueryListAsync(type, sql, (Map<String, Object>) Copier.copyToMap(bean, Copier.OPTION_SKIP_NULL_VALUE));
|
||||
}
|
||||
|
||||
default <K, V> Map<K, V> nativeQueryMap(Class<K> keyType, Class<V> valType, String sql, Serializable bean) {
|
||||
return nativeQueryMap(keyType, valType, sql, (Map<String, Object>) Copier.copyToMap(bean, Copier.OPTION_SKIP_NULL_VALUE));
|
||||
}
|
||||
|
||||
default <K, V> CompletableFuture<Map<K, V>> nativeQueryMapAsync(Class<K> keyType, Class<V> valType, String sql, Serializable bean) {
|
||||
return nativeQueryMapAsync(keyType, valType, sql, (Map<String, Object>) Copier.copyToMap(bean, Copier.OPTION_SKIP_NULL_VALUE));
|
||||
}
|
||||
|
||||
default Map<String, String> nativeQueryStrStrMap(String sql, Serializable bean) {
|
||||
return nativeQueryMap(String.class, String.class, sql, (Map<String, Object>) Copier.copyToMap(bean, Copier.OPTION_SKIP_NULL_VALUE));
|
||||
}
|
||||
|
||||
default CompletableFuture<Map<String, String>> nativeQueryStrStrMapAsync(String sql, Serializable bean) {
|
||||
return nativeQueryMapAsync(String.class, String.class, sql, (Map<String, Object>) Copier.copyToMap(bean, Copier.OPTION_SKIP_NULL_VALUE));
|
||||
}
|
||||
|
||||
default Map<Integer, String> nativeQueryIntStrMap(String sql, Serializable bean) {
|
||||
return nativeQueryMap(Integer.class, String.class, sql, (Map<String, Object>) Copier.copyToMap(bean, Copier.OPTION_SKIP_NULL_VALUE));
|
||||
}
|
||||
|
||||
default CompletableFuture<Map<Integer, String>> nativeQueryIntStrMapAsync(String sql, Serializable bean) {
|
||||
return nativeQueryMapAsync(Integer.class, String.class, sql, (Map<String, Object>) Copier.copyToMap(bean, Copier.OPTION_SKIP_NULL_VALUE));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user