Browse Source

调整 DBUtil

deason 4 năm trước cách đây
mục cha
commit
30486fabab

+ 0 - 271
examcloud-commons/src/main/java/cn/com/qmth/examcloud/commons/util/DBUtil.java

@@ -1,271 +0,0 @@
-package cn.com.qmth.examcloud.commons.util;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import javax.sql.DataSource;
-
-import org.apache.commons.lang3.StringUtils;
-
-import cn.com.qmth.examcloud.commons.exception.ExamCloudRuntimeException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * 类注释
- *
- * @author WANGWEI
- */
-public class DBUtil {
-
-	/**
-	 * 属性注释
-	 */
-	private static final Logger LOG = LoggerFactory.getLogger(DBUtil.class);
-
-	/**
-	 * 属性注释
-	 */
-	private static final Object LOCK = new Object();
-
-	/**
-	 * 属性注释
-	 */
-	private static Map<String, DataSource> dataSources = new ConcurrentHashMap<String, DataSource>();
-
-	/**
-	 * 初始化数据源(C3P0)
-	 *
-	 * @author WANGWEI
-	 * @param dataSourceName
-	 * @return
-	 */
-	public static DataSource initDataSource(final String dataSourceName) {
-		Class<?> c = null;
-		try {
-			c = Class.forName("com.alibaba.druid.pool.DruidDataSource");
-		} catch (ClassNotFoundException e) {
-			// ignore
-		}
-
-		if (null == c) {
-			try {
-				c = Class.forName("com.mchange.v2.c3p0.ComboPooledDataSource");
-			} catch (ClassNotFoundException e) {
-				// ignore
-			}
-		}
-
-		if (null == c) {
-			throw new ExamCloudRuntimeException("no class about dataSource implementation.");
-		}
-
-		@SuppressWarnings("unchecked")
-		Class<? extends DataSource> z = (Class<? extends DataSource>) c;
-
-		return initDataSource(z, dataSourceName);
-	}
-
-	/**
-	 * 初始化数据源
-	 *
-	 * @author WANGWEI
-	 * 
-	 * @param implementation
-	 *            数据源实现类
-	 * @param dataSourceName
-	 *            数据源名称
-	 * @return
-	 */
-	public static DataSource initDataSource(Class<? extends DataSource> implementation,
-			final String dataSourceName) {
-
-		String dbDriver = PropertiesUtil.getString(dataSourceName + ".driver");
-		String url = PropertiesUtil.getString(dataSourceName + ".url");
-		String userName = PropertiesUtil.getString(dataSourceName + ".username");
-		String password = PropertiesUtil.getString(dataSourceName + ".password");
-		int initialPoolSize = PropertiesUtil.getInt(dataSourceName + ".initialPoolSize", 1);
-		int minPoolSize = PropertiesUtil.getInt(dataSourceName + ".minPoolSize", 1);
-		int maxPoolSize = PropertiesUtil.getInt(dataSourceName + ".maxPoolSize", 10);
-
-		DataSource dataSource = null;
-		String simpleName = implementation.getSimpleName();
-		try {
-			// C3P0
-			if (simpleName.equals("ComboPooledDataSource")) {
-				DataSource c3po = implementation.newInstance();
-				dataSource = c3po;
-				implementation.getMethod("setDriverClass", String.class).invoke(c3po, dbDriver);
-				implementation.getMethod("setJdbcUrl", String.class).invoke(c3po, url);
-				implementation.getMethod("setUser", String.class).invoke(c3po, userName);
-				implementation.getMethod("setPassword", String.class).invoke(c3po, password);
-				implementation.getMethod("setInitialPoolSize", int.class).invoke(c3po,
-						initialPoolSize);
-				implementation.getMethod("setMinPoolSize", int.class).invoke(c3po, minPoolSize);
-				implementation.getMethod("setMaxPoolSize", int.class).invoke(c3po, maxPoolSize);
-				implementation.getMethod("setPreferredTestQuery", String.class).invoke(c3po,
-						"select 1 from dual");
-			}
-			// druid
-			else if (simpleName.equals("DruidDataSource")) {
-				DataSource druid = implementation.newInstance();
-				dataSource = druid;
-				implementation.getMethod("setDriverClassName", String.class).invoke(druid,
-						dbDriver);
-				implementation.getMethod("setUrl", String.class).invoke(druid, url);
-				implementation.getMethod("setUsername", String.class).invoke(druid, userName);
-				implementation.getMethod("setPassword", String.class).invoke(druid, password);
-				implementation.getMethod("setInitialSize", int.class).invoke(druid,
-						initialPoolSize);
-				implementation.getMethod("setMaxActive", int.class).invoke(druid, maxPoolSize);
-
-				implementation.getMethod("setValidationQuery", String.class).invoke(druid,
-						"select 1 from dual");
-			}
-
-		} catch (Exception e) {
-			LOG.error("[JDBC] Fail to init dataSource. dataSourceName=" + dataSourceName, e);
-			throw new RuntimeException(e);
-		}
-
-		Connection conn = null;
-		try {
-			conn = dataSource.getConnection();
-		} catch (Exception e) {
-			LOG.error("[JDBC] Fail to get connection. dataSourceName=" + dataSourceName, e);
-			throw new RuntimeException(e);
-		} finally {
-			close(conn);
-		}
-
-		return dataSource;
-	}
-
-	/**
-	 * 方法注释
-	 *
-	 * @author WANGWEI
-	 * @param dataSourceName
-	 * @return
-	 */
-	public static DataSource getDataSource(String dataSourceName) {
-		DataSource dataSource = dataSources.get(dataSourceName);
-		if (null == dataSource) {
-			synchronized (LOCK) {
-				dataSource = dataSources.get(dataSourceName);
-				if (null == dataSource) {
-					dataSource = initDataSource(dataSourceName);
-					dataSources.put(dataSourceName, dataSource);
-				}
-			}
-		}
-		return dataSource;
-	}
-
-	/**
-	 * 方法注释
-	 *
-	 * @author WANGWEI
-	 * @param dataSourceName
-	 * @return
-	 */
-	public static Connection getConnection(String dataSourceName) {
-		Connection conn = null;
-		try {
-			conn = getDataSource(dataSourceName).getConnection();
-		} catch (SQLException e) {
-			LOG.error("[JDBC] Fail to get connection.", e);
-		}
-
-		return conn;
-	}
-
-	/**
-	 * @param conn
-	 * @param stmt
-	 * @param res
-	 */
-	public static void close(Connection conn, Statement statement, ResultSet rs) {
-		close(rs);
-		close(conn, statement);
-	}
-
-	/**
-	 * @param conn
-	 * @param statement
-	 */
-	public static void close(Connection conn, Statement statement) {
-		close(statement);
-		close(conn);
-	}
-
-	/**
-	 * @param stmt
-	 * @param res
-	 */
-	public static void close(Statement statement, ResultSet rs) {
-		close(statement);
-		close(rs);
-	}
-
-	/**
-	 * @param conn
-	 */
-	public static void close(Connection conn) {
-		if (conn != null) {
-			try {
-				conn.close();
-			} catch (SQLException e) {
-				LOG.error("[JDBC] Fail to close Connection.", e);
-			}
-		}
-	}
-
-	/**
-	 * @param statement
-	 */
-	public static void close(Statement statement) {
-		if (statement != null) {
-			try {
-				statement.close();
-			} catch (SQLException e) {
-				LOG.error("[JDBC] Fail to close Statement.", e);
-			}
-		}
-	}
-
-	/**
-	 * @param rs
-	 */
-	public static void close(ResultSet rs) {
-		if (rs != null) {
-			try {
-				rs.close();
-			} catch (SQLException e) {
-				LOG.error("[JDBC] Fail to close ResultSet.", e);
-			}
-		}
-	}
-
-	/**
-	 * 转换为数据库模糊查询匹配模式
-	 *
-	 * @author WANGWEI
-	 * @param column
-	 * @return
-	 */
-	public static String toSqlSearchPattern(String column) {
-		if (StringUtils.isBlank(column)) {
-			return "%";
-		} else {
-			column = column.trim().replaceAll("\\s", "%");
-			column = "%" + column + "%";
-			return column;
-		}
-	}
-
-}

+ 27 - 0
examcloud-commons/src/main/java/cn/com/qmth/examcloud/commons/util/SqlUtil.java

@@ -0,0 +1,27 @@
+package cn.com.qmth.examcloud.commons.util;
+
+import org.apache.commons.lang3.StringUtils;
+
+public class SqlUtil {
+
+    /**
+     * 转换为数据库模糊查询匹配模式
+     */
+    public static String toSqlSearchPattern(String column) {
+        if (StringUtils.isBlank(column)) {
+            return "%";
+        }
+        return "%" + column.trim() + "%";
+    }
+
+    /**
+     * 转换为数据库模糊查询匹配模式 (左边全匹配、右边模糊匹配)
+     */
+    public static String toSqlRightLike(String column) {
+        if (StringUtils.isBlank(column)) {
+            return "%";
+        }
+        return column.trim() + "%";
+    }
+
+}