From f4a12f16952027a4bd749e4002a3ae60c6b690de Mon Sep 17 00:00:00 2001 From: ZhouXY108 Date: Tue, 27 Jun 2023 01:57:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=8F=82=E6=95=B0=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E5=99=A8=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commons/jdbc/SimpleJdbcTemplate.java | 72 +++++++++++-------- .../commons/util/SimpleJdbcTemplateTests.java | 3 +- 2 files changed, 46 insertions(+), 29 deletions(-) diff --git a/src/main/java/xyz/zhouxy/plusone/commons/jdbc/SimpleJdbcTemplate.java b/src/main/java/xyz/zhouxy/plusone/commons/jdbc/SimpleJdbcTemplate.java index 9200c7b..e0bab36 100644 --- a/src/main/java/xyz/zhouxy/plusone/commons/jdbc/SimpleJdbcTemplate.java +++ b/src/main/java/xyz/zhouxy/plusone/commons/jdbc/SimpleJdbcTemplate.java @@ -25,6 +25,7 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -35,11 +36,14 @@ import java.util.OptionalLong; import java.util.function.Function; import java.util.stream.Collectors; +import org.apache.commons.lang3.ArrayUtils; + import com.google.common.annotations.Beta; import com.google.common.collect.Lists; import xyz.zhouxy.plusone.commons.util.Assert; import xyz.zhouxy.plusone.commons.util.MoreArrays; +import xyz.zhouxy.plusone.commons.util.MoreCollections; import xyz.zhouxy.plusone.commons.util.OptionalUtil; @Beta @@ -49,33 +53,6 @@ public class SimpleJdbcTemplate { return new JdbcExecutor(conn); } - public static Object[] buildParams(final Object... params) { - return Arrays.stream(params) - .map(param -> { - if (param instanceof Optional) { - return OptionalUtil.orElseNull((Optional) param); - } - if (param instanceof OptionalInt) { - OptionalInt p = ((OptionalInt) param); - return p.isPresent() ? p.getAsInt() : null; - } - if (param instanceof OptionalLong) { - OptionalLong p = ((OptionalLong) param); - return p.isPresent() ? p.getAsLong() : null; - } - if (param instanceof OptionalDouble) { - OptionalDouble p = ((OptionalDouble) param); - return p.isPresent() ? p.getAsDouble() : null; - } - return param; - }) - .toArray(); - } - - public static List buildBatchParams(final Collection c, Function function) { - return c.stream().map(function).collect(Collectors.toList()); - } - public static String paramsToString(Object[] params) { return Arrays.toString(params); } @@ -213,7 +190,7 @@ public class SimpleJdbcTemplate { int executeCount = params.size() / batchSize; executeCount = (params.size() % batchSize == 0) ? executeCount : (executeCount + 1); List result = Lists.newArrayListWithCapacity(executeCount); - + try (PreparedStatement stmt = this.conn.prepareStatement(sql)) { int i = 0; for (Object[] ps : params) { @@ -252,4 +229,43 @@ public class SimpleJdbcTemplate { void execute() throws SQLException, T; } } + + public static class ParamBuilder { + + public static Object[] buildParams(final Object... params) { + if (ArrayUtils.isEmpty(params)) { + return ArrayUtils.EMPTY_OBJECT_ARRAY; + } + return Arrays.stream(params) + .map(param -> { + if (param instanceof Optional) { + return OptionalUtil.orElseNull((Optional) param); + } + if (param instanceof OptionalInt) { + return OptionalUtil.toInteger(((OptionalInt) param)); + } + if (param instanceof OptionalLong) { + return OptionalUtil.toLong(((OptionalLong) param)); + } + if (param instanceof OptionalDouble) { + return OptionalUtil.toDouble(((OptionalDouble) param)); + } + return param; + }) + .toArray(); + } + + public static List buildBatchParams(final Collection c, final Function function) { + Assert.notNull(c, "The collection can not be null."); + Assert.notNull(function, "The function can not be null."); + if (MoreCollections.isEmpty(c)) { + return Collections.emptyList(); + } + return c.stream().map(function).collect(Collectors.toList()); + } + + private ParamBuilder() { + throw new IllegalStateException("Utility class"); + } + } } diff --git a/src/test/java/xyz/zhouxy/plusone/commons/util/SimpleJdbcTemplateTests.java b/src/test/java/xyz/zhouxy/plusone/commons/util/SimpleJdbcTemplateTests.java index 02a87ab..247cd4b 100644 --- a/src/test/java/xyz/zhouxy/plusone/commons/util/SimpleJdbcTemplateTests.java +++ b/src/test/java/xyz/zhouxy/plusone/commons/util/SimpleJdbcTemplateTests.java @@ -3,6 +3,7 @@ package xyz.zhouxy.plusone.commons.util; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static xyz.zhouxy.plusone.commons.jdbc.JdbcSql.IN; +import static xyz.zhouxy.plusone.commons.jdbc.SimpleJdbcTemplate.ParamBuilder.*; import java.sql.Connection; import java.sql.SQLException; @@ -49,7 +50,7 @@ class SimpleJdbcTemplateTests { @Test void testQuery() throws SQLException { try (Connection conn = this.dataSource.getConnection()) { - Object[] params = SimpleJdbcTemplate.buildParams("501533", "501554", "544599"); + Object[] params = buildParams("501533", "501554", "544599"); String sql = SQL.newJdbcSql() .SELECT("*") .FROM("test_table")