参数的构建和输出移动到 SimpleJdbcTemplate 中。

feature/net-util
ZhouXY108 2023-06-07 11:28:44 +08:00
parent b2374e810b
commit 6947846c84
2 changed files with 68 additions and 11 deletions

View File

@ -23,13 +23,17 @@ import java.sql.ResultSet;
import java.sql.ResultSetMetaData; import java.sql.ResultSetMetaData;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.OptionalDouble;
import java.util.OptionalInt; import java.util.OptionalInt;
import java.util.OptionalLong; import java.util.OptionalLong;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
@ -45,6 +49,59 @@ public class SimpleJdbcTemplate {
return new JdbcExecutorBak(conn); return new JdbcExecutorBak(conn);
} }
public static Object[] buildParams(final Object... params) {
return Arrays.stream(params)
.map(p -> {
if (p instanceof Optional) {
return OptionalUtil.orElseNull((Optional<?>) p);
}
if (p instanceof OptionalInt) {
OptionalInt _p = ((OptionalInt) p);
return _p.isPresent() ? _p.getAsInt() : null;
}
if (p instanceof OptionalLong) {
OptionalLong _p = ((OptionalLong) p);
return _p.isPresent() ? _p.getAsLong() : null;
}
if (p instanceof OptionalDouble) {
OptionalDouble _p = ((OptionalDouble) p);
return _p.isPresent() ? _p.getAsDouble() : null;
}
return p;
})
.toArray();
}
public static <T> List<Object[]> buildBatchParams(final Collection<T> c, Function<T, Object[]> function) {
return c.stream().map(function).collect(Collectors.toList());
}
public static String paramsToString(Object[] params) {
return Arrays.toString(params);
}
public static String paramsToString(final Collection<Object[]> params) {
if (params == null) {
return "null";
}
if (params.isEmpty()) {
return "[]";
}
int iMax = params.size() - 1;
StringBuilder b = new StringBuilder();
b.append('[');
int i = 0;
for (Object[] p : params) {
b.append(Arrays.toString(p));
if (i == iMax) {
return b.append(']').toString();
}
b.append(',');
i++;
}
return b.append(']').toString();
}
private SimpleJdbcTemplate() { private SimpleJdbcTemplate() {
throw new IllegalStateException("Utility class"); throw new IllegalStateException("Utility class");
} }

View File

@ -55,7 +55,7 @@ class SimpleJdbcTemplateTests {
@Test @Test
void testQuery() throws SQLException { void testQuery() throws SQLException {
try (Connection conn = this.dataSource.getConnection()) { try (Connection conn = this.dataSource.getConnection()) {
Object[] params = MoreArrays.asObjectArray("501533", "501554", "544599"); Object[] params = SimpleJdbcTemplate.buildParams("501533", "501554", "544599");
String sql = newSql() String sql = newSql()
.SELECT("*") .SELECT("*")
.FROM("test_table") .FROM("test_table")
@ -103,16 +103,16 @@ class SimpleJdbcTemplateTests {
} }
final String sql = "INSERT INTO test_table(id, created_by, create_time, updated_by, update_time, status) VALUES(?, ?, ?, ?, ?, ?)"; final String sql = "INSERT INTO test_table(id, created_by, create_time, updated_by, update_time, status) VALUES(?, ?, ?, ?, ?, ?)";
final List<Object[]> params = recordList.stream() final List<Object[]> params = SimpleJdbcTemplate.buildBatchParams(
.map(r -> new Object[] { recordList,
OptionalUtil.orElseNull(r.getValueAsString("id")), r -> SimpleJdbcTemplate.buildParams(
OptionalUtil.orElseNull(r.getValueAsString("created_by")), r.getValueAsString("id"),
OptionalUtil.orElseNull(r.getValueAsString("create_time")), r.getValueAsString("created_by"),
OptionalUtil.orElseNull(r.getValueAsString("updated_by")), r.getValueAsString("create_time"),
OptionalUtil.orElseNull(r.getValueAsString("update_time")), r.getValueAsString("updated_by"),
OptionalUtil.orElseNull(r.getValueAsString("status")) r.getValueAsString("update_time"),
}) r.getValueAsString("status")));
.collect(Collectors.toList()); log.info("params: {}", SimpleJdbcTemplate.paramsToString(params));
try (Connection conn = this.dataSource.getConnection()) { try (Connection conn = this.dataSource.getConnection()) {
SimpleJdbcTemplate.connect(conn).tx(() -> { SimpleJdbcTemplate.connect(conn).tx(() -> {
SimpleJdbcTemplate.connect(conn).batchUpdate(sql, params, 20); SimpleJdbcTemplate.connect(conn).batchUpdate(sql, params, 20);