All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jchanghong.db.DbUtil Maven / Gradle / Ivy

The newest version!
package com.jchanghong.db;

import com.jchanghong.core.convert.Convert;
import com.jchanghong.core.io.IoUtil;
import com.jchanghong.db.dialect.Dialect;
import com.jchanghong.db.dialect.DialectFactory;
import com.jchanghong.db.ds.DSFactory;
import com.jchanghong.db.sql.SqlLog;
import com.jchanghong.log.Log;
import com.jchanghong.log.LogFactory;
import com.jchanghong.log.level.Level;
import com.jchanghong.setting.Setting;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.sql.Connection;

/**
 * 数据库操作工具类
 *
 * @author Luxiaolei
 */
public final class DbUtil {
	private final static Log log = LogFactory.get();

	/**
	 * 是否大小写不敏感(默认大小写不敏感)
	 */
	protected static boolean caseInsensitiveGlobal = true;

	/**
	 * 实例化一个新的SQL运行对象
	 *
	 * @param dialect 数据源
	 * @return SQL执行类
	 */
	public static SqlConnRunner newSqlConnRunner(Dialect dialect) {
		return SqlConnRunner.create(dialect);
	}

	/**
	 * 实例化一个新的SQL运行对象
	 *
	 * @param ds 数据源
	 * @return SQL执行类
	 */
	public static SqlConnRunner newSqlConnRunner(DataSource ds) {
		return SqlConnRunner.create(ds);
	}

	/**
	 * 实例化一个新的SQL运行对象
	 *
	 * @param conn 数据库连接对象
	 * @return SQL执行类
	 */
	public static SqlConnRunner newSqlConnRunner(Connection conn) {
		return SqlConnRunner.create(DialectFactory.newDialect(conn));
	}

	/**
	 * 实例化一个新的SQL运行对象,使用默认数据源
	 *
	 * @return SQL执行类
	 * @deprecated 请使用 {@link #use()}
	 */
	@Deprecated
	public static SqlRunner newSqlRunner() {
		return SqlRunner.create(getDs());
	}

	/**
	 * 实例化一个新的SQL运行对象
	 *
	 * @param ds 数据源
	 * @return SQL执行类
	 * @deprecated 请使用 {@link #use(DataSource)}
	 */
	@Deprecated
	public static SqlRunner newSqlRunner(DataSource ds) {
		return SqlRunner.create(ds);
	}

	/**
	 * 实例化一个新的SQL运行对象
	 *
	 * @param ds      数据源
	 * @param dialect SQL方言
	 * @return SQL执行类
	 * @deprecated 请使用 {@link #use(DataSource, Dialect)}
	 */
	@Deprecated
	public static SqlRunner newSqlRunner(DataSource ds, Dialect dialect) {
		return SqlRunner.create(ds, dialect);
	}

	/**
	 * 实例化一个新的Db,使用默认数据源
	 *
	 * @return SQL执行类
	 */
	public static Db use() {
		return Db.use();
	}

	/**
	 * 实例化一个新的Db对象
	 *
	 * @param ds 数据源
	 * @return SQL执行类
	 */
	public static Db use(DataSource ds) {
		return Db.use(ds);
	}

	/**
	 * 实例化一个新的SQL运行对象
	 *
	 * @param ds      数据源
	 * @param dialect SQL方言
	 * @return SQL执行类
	 */
	public static Db use(DataSource ds, Dialect dialect) {
		return Db.use(ds, dialect);
	}

	/**
	 * 新建数据库会话,使用默认数据源
	 *
	 * @return 数据库会话
	 */
	public static Session newSession() {
		return Session.create(getDs());
	}

	/**
	 * 新建数据库会话
	 *
	 * @param ds 数据源
	 * @return 数据库会话
	 */
	public static Session newSession(DataSource ds) {
		return Session.create(ds);
	}

	/**
	 * 连续关闭一系列的SQL相关对象
* 这些对象必须按照顺序关闭,否则会出错。 * * @param objsToClose 需要关闭的对象 */ public static void close(Object... objsToClose) { for (Object obj : objsToClose) { if(null != obj){ if (obj instanceof AutoCloseable) { IoUtil.close((AutoCloseable) obj); } else { log.warn("Object {} not a ResultSet or Statement or PreparedStatement or Connection!", obj.getClass().getName()); } } } } /** * 获得默认数据源 * * @return 默认数据源 */ public static DataSource getDs() { return DSFactory.get(); } /** * 获取指定分组的数据源 * * @param group 分组 * @return 数据源 */ public static DataSource getDs(String group) { return DSFactory.get(group); } /** * 获得JNDI数据源 * * @param jndiName JNDI名称 * @return 数据源 */ public static DataSource getJndiDsWithLog(String jndiName) { try { return getJndiDs(jndiName); } catch (DbRuntimeException e) { log.error(e.getCause(), "Find JNDI datasource error!"); } return null; } /** * 获得JNDI数据源 * * @param jndiName JNDI名称 * @return 数据源 */ public static DataSource getJndiDs(String jndiName) { try { return (DataSource) new InitialContext().lookup(jndiName); } catch (NamingException e) { throw new DbRuntimeException(e); } } /** * 从配置文件中读取SQL打印选项 * * @param setting 配置文件 * @since 4.1.7 */ public static void setShowSqlGlobal(Setting setting) { // 初始化SQL显示 final boolean isShowSql = Convert.toBool(setting.remove("showSql"), false); final boolean isFormatSql = Convert.toBool(setting.remove("formatSql"), false); final boolean isShowParams = Convert.toBool(setting.remove("showParams"), false); String sqlLevelStr = setting.remove("sqlLevel"); if (null != sqlLevelStr) { sqlLevelStr = sqlLevelStr.toUpperCase(); } final Level level = Convert.toEnum(Level.class, sqlLevelStr, Level.DEBUG); log.debug("Show sql: [{}], format sql: [{}], show params: [{}], level: [{}]", isShowSql, isFormatSql, isShowParams, level); setShowSqlGlobal(isShowSql, isFormatSql, isShowParams, level); } /** * 设置全局配置:是否通过debug日志显示SQL * * @param isShowSql 是否显示SQL * @param isFormatSql 是否格式化显示的SQL * @param isShowParams 是否打印参数 * @param level SQL打印到的日志等级 * @since 4.1.7 */ public static void setShowSqlGlobal(boolean isShowSql, boolean isFormatSql, boolean isShowParams, Level level) { SqlLog.INSTANCE.init(isShowSql, isFormatSql, isShowParams, level); } /** * 设置全局是否在结果中忽略大小写
* 如果忽略,则在Entity中调用getXXX时,字段值忽略大小写,默认忽略 * * @param caseInsensitive 否在结果中忽略大小写 * @since 5.2.4 */ public static void setCaseInsensitiveGlobal(boolean caseInsensitive) { caseInsensitiveGlobal = caseInsensitive; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy