druid 와 dbutils 를 통 해 데이터 베 이 스 를 패키지 합 니 다.
package com.hq.db;
import com.alibaba.druid.pool.DruidDataSource;
import com.hq.db.annotation.Column;
import com.hq.db.annotation.Exclude;
import com.hq.db.annotation.Table;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.log4j.Logger;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.math.BigInteger;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.*;
/**
* @author zth
* @Date 2019-04-18 20:37
*
*
*/
public class DB {
private static Logger log = Logger.getLogger(DB.class);
private static QueryRunner run = new QueryRunner();
private static DruidDataSource ds = null;
// Connection
private static ThreadLocal conn = new ThreadLocal<>();
static {
//
try{
ResourceBundle res = ResourceBundle.getBundle("jdbc");
ds = new DruidDataSource();
ds.setUrl(res.getString("url"));
ds.setDriverClassName(res.getString("driverClassName"));
ds.setUsername(res.getString("username"));
ds.setPassword(res.getString("password"));
ds.setFilters(res.getString("filters"));
ds.setMaxActive(Integer.parseInt(res.getString("maxActive")));
ds.setInitialSize(Integer.parseInt(res.getString("initialSize")));
ds.setMaxWait(Integer.parseInt(res.getString("maxWait")));
ds.setMinIdle(Integer.parseInt(res.getString("minIdle")));
//ds.setMaxIdle(Integer.parseInt(res.getString("maxIdle")));
ds.setValidationQuery(res.getString("validationQuery"));
ds.setTestWhileIdle(Boolean.parseBoolean(res.getString("testWhileIdle")));
ds.setTestOnBorrow(Boolean.parseBoolean(res.getString("testOnBorrow")));
ds.setTestOnReturn(Boolean.parseBoolean(res.getString("testOnReturn")));
ds.setTimeBetweenEvictionRunsMillis(Long.parseLong(res.getString("timeBetweenEvictionRunsMillis")));
ds.setMinEvictableIdleTimeMillis(Long.parseLong(res.getString("minEvictableIdleTimeMillis")));
//ds.setValidationQuery(res.getString("validationQuery"));
} catch (SQLException e) {
log.error("ERROR_001_com.hq.db.Db_ _line62"+e.getMessage());
}
}
/**
* DruidDataSource Connection
* @return Connection
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
// ThreadLocal Connection
Connection con = conn.get();
// , con , con
if (null == con || con.isClosed()){
con = ds.getConnection();
conn.set(con);
}
return con;
}
// --------------------------- -------------------------------------
/**
*
* @throws SQLException
*/
public static void beginTransaction() throws SQLException{
// ThreadLocal connection
Connection con = conn.get();
//
con.setAutoCommit(false);
// ThreadLocal
conn.set(con);
}
/**
*
* @throws SQLException
*/
public static void commitTransaction() throws SQLException {
// ThreadLocal connection
Connection con = conn.get();
// con , ,
if (con == null){
throw new SQLException(" , ");
}
// con ,
con.commit();
// ,
con.close();
// ThreadLocal
conn.remove();
}
/**
*
*/
public static void rollbackTransaction(){
try {
// ThreadLocal connection
Connection con = conn.get();
// con , , ,
if (con == null){
throw new SQLException(" , ");
}
//
con.rollback();
//
con.close();
// ThreadLocal
conn.remove();
}catch (SQLException e){
log.error("ERROR_002_com.hq.db_ _line134..."+e.getMessage());
}
}
/**
*
* @param connection
* @throws SQLException
*/
public static void releaseConnection(Connection connection) throws SQLException {
// ThreadLocal connection
Connection con = conn.get();
// , , ,
if (connection != null && con != connection){
// ,
if (!connection.isClosed()){
connection.close();
}
}
}
/**
* DruidDataSource
*/
public static void closeDataSource(){
if (null!=ds){
ds.close();
}
}
// ----------------------- QueryRunner --------------------------
public static int[] batch(String sql,Object[][] params) throws SQLException {
Connection con = getConnection();
int[] result = run.batch(sql,params);
releaseConnection(con);
return result;
}
public static T query(String sql ,ResultSetHandler handler,Object... params) throws SQLException {
Connection con = getConnection();
T result = run.query(con,sql,handler,params);
releaseConnection(con);
return result;
}
public static T query(String sql, ResultSetHandler handler) throws SQLException {
Connection con = getConnection();
T result = run.query(con,sql,handler);
releaseConnection(con);
return result;
}
public static int update(String sql,Object... params) throws SQLException{
Connection con = getConnection();
int result = run.update(con,sql,params);
releaseConnection(con);
return result;
}
public static int update(String sql,Object params) throws SQLException{
Connection con = getConnection();
int result = run.update(con,sql,params);
releaseConnection(con);
return result;
}
public static int update(String sql) throws SQLException{
Connection con = getConnection();
int result = run.update(con,sql);
releaseConnection(con);
return result;
}
//------------------------ -----------------------------------------------
/**
*
* @param clazz
* @param
* @return
*/
public static String getTableName(Class clazz){
String result = null;
Annotation ano = clazz.getDeclaredAnnotation(Table.class);
if (null != ano && ano instanceof Table){
Table table = (Table)ano;
result = table.value();
}else {
// ,
String allName = clazz.getName();
int lastDot = allName.lastIndexOf(".");
result = allName.substring(lastDot+1).toLowerCase();
}
return result;
}
/**
* , map
* @param t
* @param
* @return
*/
public static TreeMap parseAllField(T t){
TreeMap map = new TreeMap<>();
Field[] fields = t.getClass().getDeclaredFields();
if (fields != null && fields.length >0){
for (Field field:fields) {
String fname = field.getName();
//
if ("id".equals(fname)) continue;
if ("serialVersionUID".equals(fname)) continue;
Annotation ano = field.getAnnotation(Exclude.class);
if (null != ano && ano instanceof Exclude) continue;
//
Annotation clm = field.getAnnotation(Column.class);
field.setAccessible(true);
try {
//
if (null == field.get(t)) continue;
if (null != clm && clm instanceof Column){
map.put(((Column)clm).value(),field.get(t));
}else {
map.put(fname,field.get(t));
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
return map;
}
/**
* Map ( =?)
* @param flist (eg.name=?,age=?)
* @param values
* @param map TreeMap
*/
public static void parseFildAndQuery(StringBuilder flist, List
전송 문:
druid 설정
log4j 설정
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 객체 작성 및 제거 방법정적 공장 방법 정적 공장 방법의 장점 를 반환할 수 있습니다. 정적 공장 방법의 단점 류 공유되거나 보호된 구조기를 포함하지 않으면 이불류화할 수 없음 여러 개의 구조기 파라미터를 만났을 때 구축기를 고려해야 한다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.