From cc74ae34a295727e6c46e23b4270384f5e9444ab Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 11 Jan 2020 19:37:36 +0800 Subject: [PATCH] add query method --- CHANGELOG.md | 2 ++ .../crypto/asymmetric/AsymmetricCrypto.java | 2 ++ .../main/java/cn/hutool/db/AbstractDb.java | 22 +++++++++++++++++++ .../cn/hutool/db/dialect/DialectFactory.java | 5 +++-- .../java/cn/hutool/db/sql/SqlExecutor.java | 2 +- 5 files changed, 30 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 194a14df7..006ba0ca9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,8 @@ * 【core 】 QrCodeUtil增加背景透明支持(pr#89@Gitee) * 【core 】 增加农历ChineseDate(pr#90@Gitee) * 【core 】 ZipUtil增加zip方法写出到流(issue#I17SCT@Gitee) +* 【db 】 Db.use().query的方法中增加Map参数接口(issue#709@Github) +* 【db 】 getDialect使用数据源作为锁(issue#720@Github) ### Bug修复 * 【core 】 修复NumberUtil.mul中null的结果错误问题(issue#I17Y4J@Gitee) diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/AsymmetricCrypto.java b/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/AsymmetricCrypto.java index e1f72d401..8eafd1128 100644 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/AsymmetricCrypto.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/asymmetric/AsymmetricCrypto.java @@ -45,6 +45,7 @@ public class AsymmetricCrypto extends AbstractAsymmetricCrypto * * @param algorithm {@link SymmetricAlgorithm} */ + @SuppressWarnings("RedundantCast") public AsymmetricCrypto(AsymmetricAlgorithm algorithm) { this(algorithm, (byte[]) null, (byte[]) null); } @@ -54,6 +55,7 @@ public class AsymmetricCrypto extends AbstractAsymmetricCrypto * * @param algorithm 算法 */ + @SuppressWarnings("RedundantCast") public AsymmetricCrypto(String algorithm) { this(algorithm, (byte[]) null, (byte[]) null); } diff --git a/hutool-db/src/main/java/cn/hutool/db/AbstractDb.java b/hutool-db/src/main/java/cn/hutool/db/AbstractDb.java index 3a6a2d449..39e06e325 100644 --- a/hutool-db/src/main/java/cn/hutool/db/AbstractDb.java +++ b/hutool-db/src/main/java/cn/hutool/db/AbstractDb.java @@ -5,6 +5,7 @@ import java.sql.Connection; import java.sql.SQLException; import java.util.Collection; import java.util.List; +import java.util.Map; import javax.sql.DataSource; @@ -154,6 +155,27 @@ public abstract class AbstractDb implements Serializable { } } + /** + * 支持占位符的查询,例如:select * from table where field1=:name1 + * + * @param 结果集需要处理的对象类型 + * @param sql 查询语句,使用参数名占位符,例如:name + * @param rsh 结果集处理对象 + * @param paramMap 参数 + * @return 结果对象 + * @throws SQLException SQL执行异常 + * @since 5.1.1 + */ + public T query(String sql, RsHandler rsh, Map paramMap) throws SQLException { + Connection conn = null; + try { + conn = this.getConnection(); + return SqlExecutor.query(conn, sql, rsh, paramMap); + } finally { + this.closeConnection(conn); + } + } + /** * 执行非查询语句
* 语句包括 插入、更新、删除 diff --git a/hutool-db/src/main/java/cn/hutool/db/dialect/DialectFactory.java b/hutool-db/src/main/java/cn/hutool/db/dialect/DialectFactory.java index c68c7df42..ac1711e01 100644 --- a/hutool-db/src/main/java/cn/hutool/db/dialect/DialectFactory.java +++ b/hutool-db/src/main/java/cn/hutool/db/dialect/DialectFactory.java @@ -55,7 +55,6 @@ public class DialectFactory { public final static String DRIVER_DM7 = "dm.jdbc.driver.DmDriver"; private static Map dialectPool = new ConcurrentHashMap<>(); - private static final Object lock = new Object(); private DialectFactory() { } @@ -153,7 +152,9 @@ public class DialectFactory { public static Dialect getDialect(DataSource ds) { Dialect dialect = dialectPool.get(ds); if(null == dialect) { - synchronized (lock) { + // 数据源作为锁的意义在于:不同数据源不会导致阻塞,相同数据源获取方言时可保证互斥 + //noinspection SynchronizationOnLocalVariableOrMethodParameter + synchronized (ds) { dialect = dialectPool.get(ds); if(null == dialect) { dialect = newDialect(ds); diff --git a/hutool-db/src/main/java/cn/hutool/db/sql/SqlExecutor.java b/hutool-db/src/main/java/cn/hutool/db/sql/SqlExecutor.java index 95a4fa9a6..b0ba178fb 100644 --- a/hutool-db/src/main/java/cn/hutool/db/sql/SqlExecutor.java +++ b/hutool-db/src/main/java/cn/hutool/db/sql/SqlExecutor.java @@ -220,7 +220,7 @@ public class SqlExecutor { } /** - * 执行查询语句
+ * 执行查询语句,例如:select * from table where field1=:name1
* 此方法不会关闭Connection * * @param 处理结果类型