forked from plusone/simple-jdbc
refactor: JdbcOperationSupport 中无参数 SQL 改用 Statement 执行
update、updateAndReturnKeys、queryInternal 三个方法根据是否有参数,分别走 PreparedStatement(有参数)或 Statement(无参数),避免无参数时不必要的预编译开销
This commit is contained in:
@@ -37,6 +37,8 @@ import java.util.List;
|
|||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import xyz.zhouxy.plusone.commons.util.ArrayTools;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JdbcOperationSupport
|
* JdbcOperationSupport
|
||||||
*
|
*
|
||||||
@@ -160,9 +162,16 @@ class JdbcOperationSupport {
|
|||||||
throws SQLException {
|
throws SQLException {
|
||||||
assertConnectionNotNull(conn);
|
assertConnectionNotNull(conn);
|
||||||
assertSqlNotNull(sql);
|
assertSqlNotNull(sql);
|
||||||
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
|
if (ArrayTools.isNotEmpty(params)) {
|
||||||
fillStatement(stmt, params);
|
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
|
||||||
return stmt.executeUpdate();
|
fillStatement(stmt, params);
|
||||||
|
return stmt.executeUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
try (Statement stmt = conn.createStatement()) {
|
||||||
|
return stmt.executeUpdate(sql);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -182,12 +191,23 @@ class JdbcOperationSupport {
|
|||||||
assertConnectionNotNull(conn);
|
assertConnectionNotNull(conn);
|
||||||
assertSqlNotNull(sql);
|
assertSqlNotNull(sql);
|
||||||
assertRowMapperNotNull(rowMapper);
|
assertRowMapperNotNull(rowMapper);
|
||||||
try (PreparedStatement stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
|
if (ArrayTools.isNotEmpty(params)) {
|
||||||
fillStatement(stmt, params);
|
try (PreparedStatement stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
|
||||||
stmt.executeUpdate();
|
fillStatement(stmt, params);
|
||||||
try (ResultSet generatedKeys = stmt.getGeneratedKeys()) {
|
stmt.executeUpdate();
|
||||||
final ResultHandler<List<T>> resultHandler = ResultHandler.mapToList(rowMapper);
|
try (ResultSet generatedKeys = stmt.getGeneratedKeys()) {
|
||||||
return resultHandler.handle(generatedKeys);
|
final ResultHandler<List<T>> resultHandler = ResultHandler.mapToList(rowMapper);
|
||||||
|
return resultHandler.handle(generatedKeys);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
try (Statement stmt = conn.createStatement()) {
|
||||||
|
stmt.executeUpdate(sql);
|
||||||
|
try (ResultSet generatedKeys = stmt.getGeneratedKeys()) {
|
||||||
|
final ResultHandler<List<T>> resultHandler = ResultHandler.mapToList(rowMapper);
|
||||||
|
return resultHandler.handle(generatedKeys);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -288,9 +308,17 @@ class JdbcOperationSupport {
|
|||||||
@Nullable Object[] params,
|
@Nullable Object[] params,
|
||||||
@Nonnull ResultHandler<T> resultHandler)
|
@Nonnull ResultHandler<T> resultHandler)
|
||||||
throws SQLException {
|
throws SQLException {
|
||||||
try (PreparedStatement stmt = createPreparedStatementInternal(conn, sql, params);
|
if (ArrayTools.isNotEmpty(params)) {
|
||||||
ResultSet rs = stmt.executeQuery()) {
|
try (PreparedStatement stmt = createPreparedStatementInternal(conn, sql, params);
|
||||||
return resultHandler.handle(rs);
|
ResultSet rs = stmt.executeQuery()) {
|
||||||
|
return resultHandler.handle(rs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
try (Statement stmt = conn.createStatement();
|
||||||
|
ResultSet rs = stmt.executeQuery(sql)) {
|
||||||
|
return resultHandler.handle(rs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user