mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
add setFetchSize and FetchDirection
This commit is contained in:
@@ -16,9 +16,11 @@
|
|||||||
|
|
||||||
package cn.hutool.v7.db.config;
|
package cn.hutool.v7.db.config;
|
||||||
|
|
||||||
|
import cn.hutool.v7.db.Db;
|
||||||
import cn.hutool.v7.db.dialect.Dialect;
|
import cn.hutool.v7.db.dialect.Dialect;
|
||||||
import cn.hutool.v7.db.driver.DriverUtil;
|
import cn.hutool.v7.db.driver.DriverUtil;
|
||||||
import cn.hutool.v7.db.ds.DSFactory;
|
import cn.hutool.v7.db.ds.DSFactory;
|
||||||
|
import cn.hutool.v7.db.sql.FetchDirection;
|
||||||
import cn.hutool.v7.db.sql.filter.SqlFilter;
|
import cn.hutool.v7.db.sql.filter.SqlFilter;
|
||||||
import cn.hutool.v7.db.sql.filter.SqlFilterChain;
|
import cn.hutool.v7.db.sql.filter.SqlFilterChain;
|
||||||
|
|
||||||
@@ -80,6 +82,15 @@ public class DbConfig extends ConnectionConfig<DbConfig> {
|
|||||||
*/
|
*/
|
||||||
private Dialect dialect;
|
private Dialect dialect;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 结果集的一次取出数据的数量,0或null表示默认值
|
||||||
|
*/
|
||||||
|
private Integer fetchSize;
|
||||||
|
/**
|
||||||
|
* 结果集的游标方向
|
||||||
|
*/
|
||||||
|
private FetchDirection fetchDirection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构造
|
* 构造
|
||||||
*/
|
*/
|
||||||
@@ -169,4 +180,41 @@ public class DbConfig extends ConnectionConfig<DbConfig> {
|
|||||||
this.dialect = dialect;
|
this.dialect = dialect;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取一次取出数据的数量,0或null表示默认值
|
||||||
|
* @return 一次取出数据的数量,0或null表示默认值
|
||||||
|
*/
|
||||||
|
public Integer getFetchSize() {
|
||||||
|
return fetchSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置一次取出数据的数量,0或null表示默认值
|
||||||
|
* @param fetchSize 一次取出数据的数量,0或null表示默认值
|
||||||
|
* @return this
|
||||||
|
*/
|
||||||
|
public DbConfig setFetchSize(final Integer fetchSize) {
|
||||||
|
this.fetchSize = fetchSize;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取结果集的游标方向
|
||||||
|
* @return 结果集的游标方向
|
||||||
|
*/
|
||||||
|
public FetchDirection getFetchDirection() {
|
||||||
|
return fetchDirection;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置结果集的游标方向
|
||||||
|
* @param fetchDirection 结果集的游标方向
|
||||||
|
* @return this
|
||||||
|
*/
|
||||||
|
public DbConfig setFetchDirection(final FetchDirection fetchDirection) {
|
||||||
|
this.fetchDirection = fetchDirection;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -25,6 +25,7 @@ import cn.hutool.v7.db.dialect.DialectName;
|
|||||||
import cn.hutool.v7.db.sql.QuoteWrapper;
|
import cn.hutool.v7.db.sql.QuoteWrapper;
|
||||||
import cn.hutool.v7.db.sql.SqlBuilder;
|
import cn.hutool.v7.db.sql.SqlBuilder;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
|
|
||||||
@@ -34,6 +35,7 @@ import java.sql.PreparedStatement;
|
|||||||
* @author loolly
|
* @author loolly
|
||||||
*/
|
*/
|
||||||
public class MysqlDialect extends AnsiSqlDialect {
|
public class MysqlDialect extends AnsiSqlDialect {
|
||||||
|
@Serial
|
||||||
private static final long serialVersionUID = -3734718212043823636L;
|
private static final long serialVersionUID = -3734718212043823636L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -81,7 +83,7 @@ public class MysqlDialect extends AnsiSqlDialect {
|
|||||||
// 构建字段部分和参数占位符部分
|
// 构建字段部分和参数占位符部分
|
||||||
entity.forEach((field, value) -> {
|
entity.forEach((field, value) -> {
|
||||||
if (StrUtil.isNotBlank(field)) {
|
if (StrUtil.isNotBlank(field)) {
|
||||||
if (fieldsPart.length() > 0) {
|
if (!fieldsPart.isEmpty()) {
|
||||||
// 非第一个参数,追加逗号
|
// 非第一个参数,追加逗号
|
||||||
fieldsPart.append(", ");
|
fieldsPart.append(", ");
|
||||||
placeHolder.append(", ");
|
placeHolder.append(", ");
|
||||||
|
@@ -24,6 +24,7 @@ import org.stone.beecp.BeeDataSource;
|
|||||||
import org.stone.beecp.BeeDataSourceConfig;
|
import org.stone.beecp.BeeDataSourceConfig;
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
import java.io.Serial;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -32,6 +33,7 @@ import java.util.Properties;
|
|||||||
* @author Looly
|
* @author Looly
|
||||||
*/
|
*/
|
||||||
public class BeeDSFactory extends AbstractDSFactory {
|
public class BeeDSFactory extends AbstractDSFactory {
|
||||||
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -0,0 +1,43 @@
|
|||||||
|
package cn.hutool.v7.db.sql;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取结果集的移动方向
|
||||||
|
*
|
||||||
|
* @author looly
|
||||||
|
* @since 7.0.0
|
||||||
|
*/
|
||||||
|
public enum FetchDirection {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认方向
|
||||||
|
*/
|
||||||
|
FORWARD(ResultSet.FETCH_FORWARD),
|
||||||
|
/**
|
||||||
|
* 反向
|
||||||
|
*/
|
||||||
|
REVERSE(ResultSet.FETCH_REVERSE),
|
||||||
|
/**
|
||||||
|
* 不确定方向
|
||||||
|
*/
|
||||||
|
UNKNOWN(ResultSet.FETCH_UNKNOWN);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取值
|
||||||
|
*/
|
||||||
|
private final int value;
|
||||||
|
|
||||||
|
FetchDirection(int value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取值
|
||||||
|
*
|
||||||
|
* @return 值
|
||||||
|
*/
|
||||||
|
public int getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
@@ -28,6 +28,7 @@ import cn.hutool.v7.db.DbException;
|
|||||||
import cn.hutool.v7.db.Entity;
|
import cn.hutool.v7.db.Entity;
|
||||||
import cn.hutool.v7.db.sql.filter.SqlFilter;
|
import cn.hutool.v7.db.sql.filter.SqlFilter;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -41,6 +42,7 @@ import java.util.Set;
|
|||||||
* @since 6.0.0
|
* @since 6.0.0
|
||||||
*/
|
*/
|
||||||
public class StatementBuilder implements Builder<StatementWrapper> {
|
public class StatementBuilder implements Builder<StatementWrapper> {
|
||||||
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -163,8 +165,7 @@ public class StatementBuilder implements Builder<StatementWrapper> {
|
|||||||
}
|
}
|
||||||
if (ArrayUtil.isArray(params)) {
|
if (ArrayUtil.isArray(params)) {
|
||||||
ps.fillParams(new ArrayIter<>(params), nullTypeMap);
|
ps.fillParams(new ArrayIter<>(params), nullTypeMap);
|
||||||
} else if (params instanceof Entity) {
|
} else if (params instanceof Entity entity) {
|
||||||
final Entity entity = (Entity) params;
|
|
||||||
// 对于多Entity批量插入的情况,为防止数据不对齐,故按照首行提供键值对筛选。
|
// 对于多Entity批量插入的情况,为防止数据不对齐,故按照首行提供键值对筛选。
|
||||||
if(null == keys){
|
if(null == keys){
|
||||||
keys = entity.keySet();
|
keys = entity.keySet();
|
||||||
|
@@ -51,13 +51,28 @@ public class StatementUtil {
|
|||||||
* @since 5.8.19
|
* @since 5.8.19
|
||||||
*/
|
*/
|
||||||
public static PreparedStatement prepareStatement(final boolean returnGeneratedKey, final DbConfig config, final Connection conn, final String sql, final Object... params) {
|
public static PreparedStatement prepareStatement(final boolean returnGeneratedKey, final DbConfig config, final Connection conn, final String sql, final Object... params) {
|
||||||
return StatementBuilder.of()
|
PreparedStatement statement = StatementBuilder.of()
|
||||||
.setConnection(conn)
|
.setConnection(conn)
|
||||||
.setReturnGeneratedKey(returnGeneratedKey)
|
.setReturnGeneratedKey(returnGeneratedKey)
|
||||||
.setSqlFilter(Opt.ofNullable(config).map(DbConfig::getSqlFilters).getOrNull())
|
.setSqlFilter(Opt.ofNullable(config).map(DbConfig::getSqlFilters).getOrNull())
|
||||||
.setSql(sql)
|
.setSql(sql)
|
||||||
.setParams(params)
|
.setParams(params)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
try{
|
||||||
|
final Integer fetchSize = config.getFetchSize();
|
||||||
|
if (null != fetchSize) {
|
||||||
|
statement.setFetchSize(fetchSize);
|
||||||
|
}
|
||||||
|
final FetchDirection fetchDirection = config.getFetchDirection();
|
||||||
|
if (null != fetchDirection) {
|
||||||
|
statement.setFetchDirection(fetchDirection.getValue());
|
||||||
|
}
|
||||||
|
} catch (SQLException e){
|
||||||
|
throw new DbException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return statement;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -22,6 +22,10 @@ module hutool.db {
|
|||||||
|
|
||||||
exports cn.hutool.v7.db;
|
exports cn.hutool.v7.db;
|
||||||
exports cn.hutool.v7.db.config;
|
exports cn.hutool.v7.db.config;
|
||||||
|
exports cn.hutool.v7.db.handler;
|
||||||
|
exports cn.hutool.v7.db.dialect;
|
||||||
|
exports cn.hutool.v7.db.sql;
|
||||||
|
exports cn.hutool.v7.db.sql.filter;
|
||||||
exports cn.hutool.v7.db.ds;
|
exports cn.hutool.v7.db.ds;
|
||||||
exports cn.hutool.v7.db.ds.bee;
|
exports cn.hutool.v7.db.ds.bee;
|
||||||
exports cn.hutool.v7.db.ds.c3p0;
|
exports cn.hutool.v7.db.ds.c3p0;
|
||||||
|
Reference in New Issue
Block a user