diff --git a/.gitignore b/.gitignore
index 5ff6309..af665ab 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,4 +35,4 @@ build/
.vscode/
### Mac OS ###
-.DS_Store
\ No newline at end of file
+.DS_Store
diff --git a/pom.xml b/pom.xml
index 8526a62..5ac365c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,6 +21,12 @@
0.1.0-SNAPSHOT
+
+ org.apache.commons
+ commons-lang3
+ 3.16.0
+
+
org.junit.jupiter
junit-jupiter-api
diff --git a/src/main/java/xyz/zhouxy/jdbc/ParamBuilder.java b/src/main/java/xyz/zhouxy/jdbc/ParamBuilder.java
new file mode 100644
index 0000000..90b3e51
--- /dev/null
+++ b/src/main/java/xyz/zhouxy/jdbc/ParamBuilder.java
@@ -0,0 +1,58 @@
+package xyz.zhouxy.jdbc;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import java.util.OptionalDouble;
+import java.util.OptionalInt;
+import java.util.OptionalLong;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import com.google.common.base.Preconditions;
+
+import xyz.zhouxy.plusone.commons.collection.CollectionTools;
+import xyz.zhouxy.plusone.commons.util.ArrayTools;
+import xyz.zhouxy.plusone.commons.util.OptionalTools;
+
+public class ParamBuilder {
+ public static final Object[] EMPTY_OBJECT_ARRAY = {};
+
+ public static Object[] buildParams(final Object... params) {
+ if (ArrayTools.isNullOrEmpty(params)) {
+ return EMPTY_OBJECT_ARRAY;
+ }
+ return Arrays.stream(params)
+ .map(param -> {
+ if (param instanceof Optional) {
+ return OptionalTools.orElseNull((Optional>) param);
+ }
+ if (param instanceof OptionalInt) {
+ return OptionalTools.toInteger(((OptionalInt) param));
+ }
+ if (param instanceof OptionalLong) {
+ return OptionalTools.toLong(((OptionalLong) param));
+ }
+ if (param instanceof OptionalDouble) {
+ return OptionalTools.toDouble(((OptionalDouble) param));
+ }
+ return param;
+ })
+ .toArray();
+ }
+
+ public static List