mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-05 17:37:59 +08:00
add DriverNamePool
This commit is contained in:
parent
3a105e0334
commit
c7f7c4c1f9
@ -22,6 +22,8 @@
|
||||
* 【extra 】 添加Houbb Pinyin支持(pr#1506@Github)
|
||||
* 【core 】 添加LambdaUtil(pr#295@Gitee)
|
||||
* 【core 】 添加StrPool和CharPool
|
||||
* 【extra 】 CglibUtil增加toBean和fillBean方法
|
||||
* 【db 】 增加DriverNamePool
|
||||
|
||||
### Bug修复
|
||||
* 【core 】 修复Validator.isUrl()传空返回true(issue#I3ETTY@Gitee)
|
||||
|
@ -4,14 +4,8 @@ import cn.hutool.core.collection.IterUtil;
|
||||
import cn.hutool.core.comparator.CompareUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.exceptions.UtilException;
|
||||
import cn.hutool.core.io.FastByteArrayOutputStream;
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.io.Serializable;
|
||||
import java.lang.reflect.Array;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Collection;
|
||||
@ -427,24 +421,8 @@ public class ObjectUtil {
|
||||
* @return 克隆后的对象
|
||||
* @throws UtilException IO异常和ClassNotFoundException封装
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T> T cloneByStream(T obj) {
|
||||
if (false == (obj instanceof Serializable)) {
|
||||
return null;
|
||||
}
|
||||
final FastByteArrayOutputStream byteOut = new FastByteArrayOutputStream();
|
||||
ObjectOutputStream out = null;
|
||||
try {
|
||||
out = new ObjectOutputStream(byteOut);
|
||||
out.writeObject(obj);
|
||||
out.flush();
|
||||
final ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(byteOut.toByteArray()));
|
||||
return (T) in.readObject();
|
||||
} catch (Exception e) {
|
||||
throw new UtilException(e);
|
||||
} finally {
|
||||
IoUtil.close(out);
|
||||
}
|
||||
return SerializeUtil.clone(obj);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -456,12 +434,7 @@ public class ObjectUtil {
|
||||
* @return 序列化后的字节码
|
||||
*/
|
||||
public static <T> byte[] serialize(T obj) {
|
||||
if (false == (obj instanceof Serializable)) {
|
||||
return null;
|
||||
}
|
||||
final FastByteArrayOutputStream byteOut = new FastByteArrayOutputStream();
|
||||
IoUtil.writeObjects(byteOut, false, (Serializable) obj);
|
||||
return byteOut.toByteArray();
|
||||
return SerializeUtil.serialize(obj);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -477,7 +450,7 @@ public class ObjectUtil {
|
||||
* @return 反序列化后的对象
|
||||
*/
|
||||
public static <T> T deserialize(byte[] bytes) {
|
||||
return IoUtil.readObj(new ByteArrayInputStream(bytes));
|
||||
return SerializeUtil.deserialize(bytes);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -612,7 +585,7 @@ public class ObjectUtil {
|
||||
* @param objs 被检查对象
|
||||
* @return 是否存在
|
||||
* @since 5.5.3
|
||||
* @see ArrayUtil#hasNull(Object[])
|
||||
* @see ArrayUtil#hasNull(Object[])
|
||||
*/
|
||||
public static boolean hasNull(Object... objs) {
|
||||
return ArrayUtil.hasNull(objs);
|
||||
|
@ -0,0 +1,66 @@
|
||||
package cn.hutool.core.util;
|
||||
|
||||
import cn.hutool.core.exceptions.UtilException;
|
||||
import cn.hutool.core.io.FastByteArrayOutputStream;
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 序列化工具类
|
||||
*
|
||||
* @author looly
|
||||
* @since 5.6.3
|
||||
*/
|
||||
public class SerializeUtil {
|
||||
|
||||
/**
|
||||
* 序列化后拷贝流的方式克隆<br>
|
||||
* 对象必须实现Serializable接口
|
||||
*
|
||||
* @param <T> 对象类型
|
||||
* @param obj 被克隆对象
|
||||
* @return 克隆后的对象
|
||||
* @throws UtilException IO异常和ClassNotFoundException封装
|
||||
*/
|
||||
public static <T> T clone(T obj) {
|
||||
if (false == (obj instanceof Serializable)) {
|
||||
return null;
|
||||
}
|
||||
return deserialize(serialize(obj));
|
||||
}
|
||||
|
||||
/**
|
||||
* 序列化<br>
|
||||
* 对象必须实现Serializable接口
|
||||
*
|
||||
* @param <T> 对象类型
|
||||
* @param obj 要被序列化的对象
|
||||
* @return 序列化后的字节码
|
||||
*/
|
||||
public static <T> byte[] serialize(T obj) {
|
||||
if (false == (obj instanceof Serializable)) {
|
||||
return null;
|
||||
}
|
||||
final FastByteArrayOutputStream byteOut = new FastByteArrayOutputStream();
|
||||
IoUtil.writeObjects(byteOut, false, (Serializable) obj);
|
||||
return byteOut.toByteArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* 反序列化<br>
|
||||
* 对象必须实现Serializable接口
|
||||
*
|
||||
* <p>
|
||||
* 注意!!! 此方法不会检查反序列化安全,可能存在反序列化漏洞风险!!!
|
||||
* </p>
|
||||
*
|
||||
* @param <T> 对象类型
|
||||
* @param bytes 反序列化的字节码
|
||||
* @return 反序列化后的对象
|
||||
*/
|
||||
public static <T> T deserialize(byte[] bytes) {
|
||||
return IoUtil.readObj(new ByteArrayInputStream(bytes));
|
||||
}
|
||||
}
|
@ -23,40 +23,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
* @author loolly
|
||||
*
|
||||
*/
|
||||
public class DialectFactory {
|
||||
|
||||
/** JDBC 驱动 MySQL */
|
||||
public static final String DRIVER_MYSQL = "com.mysql.jdbc.Driver";
|
||||
/** JDBC 驱动 MySQL,在6.X版本中变动驱动类名,且使用SPI机制 */
|
||||
public static final String DRIVER_MYSQL_V6 = "com.mysql.cj.jdbc.Driver";
|
||||
/** JDBC 驱动 Oracle */
|
||||
public static final String DRIVER_ORACLE = "oracle.jdbc.OracleDriver";
|
||||
/** JDBC 驱动 Oracle,旧版使用 */
|
||||
public static final String DRIVER_ORACLE_OLD = "oracle.jdbc.driver.OracleDriver";
|
||||
/** JDBC 驱动 PostgreSQL */
|
||||
public static final String DRIVER_POSTGRESQL = "org.postgresql.Driver";
|
||||
/** JDBC 驱动 SQLLite3 */
|
||||
public static final String DRIVER_SQLLITE3 = "org.sqlite.JDBC";
|
||||
/** JDBC 驱动 SQLServer */
|
||||
public static final String DRIVER_SQLSERVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
|
||||
/** JDBC 驱动 Hive */
|
||||
public static final String DRIVER_HIVE = "org.apache.hadoop.hive.jdbc.HiveDriver";
|
||||
/** JDBC 驱动 Hive2 */
|
||||
public static final String DRIVER_HIVE2 = "org.apache.hive.jdbc.HiveDriver";
|
||||
/** JDBC 驱动 H2 */
|
||||
public static final String DRIVER_H2 = "org.h2.Driver";
|
||||
/** JDBC 驱动 Derby */
|
||||
public static final String DRIVER_DERBY = "org.apache.derby.jdbc.AutoloadedDriver";
|
||||
/** JDBC 驱动 HSQLDB */
|
||||
public static final String DRIVER_HSQLDB = "org.hsqldb.jdbc.JDBCDriver";
|
||||
/** JDBC 驱动 达梦7 */
|
||||
public static final String DRIVER_DM7 = "dm.jdbc.driver.DmDriver";
|
||||
/** JDBC 驱动 人大金仓 */
|
||||
public static final String DRIVER_KINGBASE8 = "com.kingbase8.Driver";
|
||||
/** JDBC 驱动 Ignite thin */
|
||||
public static final String DRIVER_IGNITE_THIN = "org.apache.ignite.IgniteJdbcThinDriver";
|
||||
/** JDBC 驱动 ClickHouse */
|
||||
public static final String DRIVER_CLICK_HOUSE = "ru.yandex.clickhouse.ClickHouseDriver";
|
||||
public class DialectFactory implements DriverNamePool{
|
||||
|
||||
private static final Map<DataSource, Dialect> DIALECT_POOL = new ConcurrentHashMap<>();
|
||||
|
||||
@ -123,7 +90,7 @@ public class DialectFactory {
|
||||
}
|
||||
|
||||
String driver = null;
|
||||
if (nameContainsProductInfo.contains("mysql")) {
|
||||
if (nameContainsProductInfo.contains("mysql") || nameContainsProductInfo.contains("cobar")) {
|
||||
driver = ClassLoaderUtil.isPresent(DRIVER_MYSQL_V6) ? DRIVER_MYSQL_V6 : DRIVER_MYSQL;
|
||||
} else if (nameContainsProductInfo.contains("oracle")) {
|
||||
driver = ClassLoaderUtil.isPresent(DRIVER_ORACLE) ? DRIVER_ORACLE : DRIVER_ORACLE_OLD;
|
||||
@ -131,7 +98,7 @@ public class DialectFactory {
|
||||
driver = DRIVER_POSTGRESQL;
|
||||
} else if (nameContainsProductInfo.contains("sqlite")) {
|
||||
driver = DRIVER_SQLLITE3;
|
||||
} else if (nameContainsProductInfo.contains("sqlserver")) {
|
||||
} else if (nameContainsProductInfo.contains("sqlserver") || nameContainsProductInfo.contains("microsoft")) {
|
||||
driver = DRIVER_SQLSERVER;
|
||||
} else if (nameContainsProductInfo.contains("hive")) {
|
||||
driver = DRIVER_HIVE;
|
||||
@ -155,6 +122,30 @@ public class DialectFactory {
|
||||
} else if (nameContainsProductInfo.contains("clickhouse")) {
|
||||
// ClickHouse
|
||||
driver = DRIVER_CLICK_HOUSE;
|
||||
} else if (nameContainsProductInfo.contains("highgo")) {
|
||||
// 瀚高
|
||||
driver = DRIVER_HIGHGO;
|
||||
} else if (nameContainsProductInfo.contains("db2")) {
|
||||
// DB2
|
||||
driver = DRIVER_DB2;
|
||||
} else if (nameContainsProductInfo.contains("xugu")) {
|
||||
// 虚谷
|
||||
driver = DRIVER_XUGU;
|
||||
} else if (nameContainsProductInfo.contains("phoenix")) {
|
||||
// Apache Phoenix
|
||||
driver = DRIVER_PHOENIX;
|
||||
} else if (nameContainsProductInfo.contains("zenith")) {
|
||||
// 华为高斯
|
||||
driver = DRIVER_GAUSS;
|
||||
} else if (nameContainsProductInfo.contains("gbase")) {
|
||||
// 华为高斯
|
||||
driver = DRIVER_GBASE;
|
||||
} else if (nameContainsProductInfo.contains("oscar")) {
|
||||
// 神州数据库
|
||||
driver = DRIVER_OSCAR;
|
||||
} else if (nameContainsProductInfo.contains("sybase")) {
|
||||
// 神州数据库
|
||||
driver = DRIVER_SYBASE;
|
||||
}
|
||||
|
||||
return driver;
|
||||
|
112
hutool-db/src/main/java/cn/hutool/db/dialect/DriverNamePool.java
Normal file
112
hutool-db/src/main/java/cn/hutool/db/dialect/DriverNamePool.java
Normal file
@ -0,0 +1,112 @@
|
||||
package cn.hutool.db.dialect;
|
||||
|
||||
/**
|
||||
* 常用数据库驱动池
|
||||
*
|
||||
* @author looly
|
||||
* @since 5.6.3
|
||||
*/
|
||||
public interface DriverNamePool {
|
||||
|
||||
/**
|
||||
* JDBC 驱动 MySQL
|
||||
*/
|
||||
String DRIVER_MYSQL = "com.mysql.jdbc.Driver";
|
||||
/**
|
||||
* JDBC 驱动 MySQL,在6.X版本中变动驱动类名,且使用SPI机制
|
||||
*/
|
||||
String DRIVER_MYSQL_V6 = "com.mysql.cj.jdbc.Driver";
|
||||
/**
|
||||
* JDBC 驱动 MariaDB
|
||||
*/
|
||||
String DRIVER_MARIADB = "org.mariadb.jdbc.Driver";
|
||||
/**
|
||||
* JDBC 驱动 Oracle
|
||||
*/
|
||||
String DRIVER_ORACLE = "oracle.jdbc.OracleDriver";
|
||||
/**
|
||||
* JDBC 驱动 Oracle,旧版使用
|
||||
*/
|
||||
String DRIVER_ORACLE_OLD = "oracle.jdbc.driver.OracleDriver";
|
||||
/**
|
||||
* JDBC 驱动 PostgreSQL
|
||||
*/
|
||||
String DRIVER_POSTGRESQL = "org.postgresql.Driver";
|
||||
/**
|
||||
* JDBC 驱动 SQLLite3
|
||||
*/
|
||||
String DRIVER_SQLLITE3 = "org.sqlite.JDBC";
|
||||
/**
|
||||
* JDBC 驱动 SQLServer
|
||||
*/
|
||||
String DRIVER_SQLSERVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
|
||||
/**
|
||||
* JDBC 驱动 Hive
|
||||
*/
|
||||
String DRIVER_HIVE = "org.apache.hadoop.hive.jdbc.HiveDriver";
|
||||
/**
|
||||
* JDBC 驱动 Hive2
|
||||
*/
|
||||
String DRIVER_HIVE2 = "org.apache.hive.jdbc.HiveDriver";
|
||||
/**
|
||||
* JDBC 驱动 H2
|
||||
*/
|
||||
String DRIVER_H2 = "org.h2.Driver";
|
||||
/**
|
||||
* JDBC 驱动 Derby
|
||||
*/
|
||||
String DRIVER_DERBY = "org.apache.derby.jdbc.AutoloadedDriver";
|
||||
/**
|
||||
* JDBC 驱动 HSQLDB
|
||||
*/
|
||||
String DRIVER_HSQLDB = "org.hsqldb.jdbc.JDBCDriver";
|
||||
/**
|
||||
* JDBC 驱动 达梦7
|
||||
*/
|
||||
String DRIVER_DM7 = "dm.jdbc.driver.DmDriver";
|
||||
/**
|
||||
* JDBC 驱动 人大金仓
|
||||
*/
|
||||
String DRIVER_KINGBASE8 = "com.kingbase8.Driver";
|
||||
/**
|
||||
* JDBC 驱动 Ignite thin
|
||||
*/
|
||||
String DRIVER_IGNITE_THIN = "org.apache.ignite.IgniteJdbcThinDriver";
|
||||
/**
|
||||
* JDBC 驱动 ClickHouse
|
||||
*/
|
||||
String DRIVER_CLICK_HOUSE = "ru.yandex.clickhouse.ClickHouseDriver";
|
||||
/**
|
||||
* JDBC 驱动 瀚高数据库
|
||||
*/
|
||||
String DRIVER_HIGHGO = "com.highgo.jdbc.Driver";
|
||||
/**
|
||||
* JDBC 驱动 DB2
|
||||
*/
|
||||
String DRIVER_DB2 = "com.ibm.db2.jdbc.app.DB2Driver";
|
||||
/**
|
||||
* JDBC 驱动 虚谷数据库
|
||||
*/
|
||||
String DRIVER_XUGU = "com.xugu.cloudjdbc.Driver";
|
||||
/**
|
||||
* JDBC 驱动 Apache Phoenix
|
||||
*/
|
||||
String DRIVER_PHOENIX = "org.apache.phoenix.jdbc.PhoenixDriver";
|
||||
/**
|
||||
* JDBC 驱动 华为高斯
|
||||
*/
|
||||
String DRIVER_GAUSS = "com.huawei.gauss.jdbc.ZenithDriver";
|
||||
/**
|
||||
* JDBC 驱动 南大通用
|
||||
*/
|
||||
String DRIVER_GBASE = "com.gbase.jdbc.Driver";
|
||||
/**
|
||||
* JDBC 驱动 神州数据库
|
||||
*/
|
||||
String DRIVER_OSCAR = "com.oscar.Driver";
|
||||
/**
|
||||
* JDBC 驱动 Sybase
|
||||
*/
|
||||
String DRIVER_SYBASE = "com.sybase.jdbc4.jdbc.SybDriver";
|
||||
|
||||
}
|
@ -8,6 +8,7 @@ import net.sf.cglib.core.Converter;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
@ -152,4 +153,31 @@ public class CglibUtil {
|
||||
public static BeanMap toMap(Object bean) {
|
||||
return BeanMap.create(bean);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将Map中的内容填充至Bean中
|
||||
* @param map Map
|
||||
* @param bean Bean
|
||||
* @param <T> Bean类型
|
||||
* @return bean
|
||||
* @since 5.6.3
|
||||
*/
|
||||
@SuppressWarnings("rawtypes")
|
||||
public static <T> T fillBean(Map map, T bean){
|
||||
BeanMap.create(bean).putAll(map);
|
||||
return bean;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将Map转换为Bean
|
||||
* @param map Map
|
||||
* @param beanClass Bean类
|
||||
* @param <T> Bean类型
|
||||
* @return bean
|
||||
* @since 5.6.3
|
||||
*/
|
||||
@SuppressWarnings("rawtypes")
|
||||
public static <T> T toBean(Map map, Class<T> beanClass){
|
||||
return fillBean(map, ReflectUtil.newInstanceIfPossible(beanClass));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user