JDBC数据库通用DAO

原文地址:http://www.oschina.net/code/snippet_86510_4404

 

包括DAO、连接池、事务控制。
连接池用的是
BoneCP
BoneCP运行时需要slf4jguava的支持。
当然也可以随意换成其他的连接池。
dao的vo是用结果转换器控制的,需要继承ResultConverter。
这招是和
spring的jdbcTemplete学的
日志组件用的是
slf4j,需要的可自行更换其他日志组件。
demo的在
http://www.oschina.net/code/snippet_86510_4466
末尾有源码和试例包下载


package org.dave.common.database;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ResourceBundle;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.jolbox.bonecp.BoneCP;
import com.jolbox.bonecp.BoneCPConfig;

/**
 * 数据库连接池
 * @author David Day
 */
public final class DatabaseConnectionPool {

	private static final Logger LOG = LoggerFactory.getLogger(DatabaseConnectionPool.class);
	private static final ResourceBundle BUNDLE = ResourceBundle.getBundle("connection");
	private static final String DRIVER = "driver";
	private static final String URL = "url";
	private static final String USERNAME = "username";
	private static final String PASSWORD = "password";
	private static final String MAX_CONNECTION = "max_connection";
	private static BoneCP pool;
	
	/**
	 * 开启连接池
	 */
	public static void startup() {
		try {
			Class.forName(BUNDLE.getString(DRIVER));
			BoneCPConfig config = new BoneCPConfig();
			config.setJdbcUrl(BUNDLE.getString(URL));
			config.setUsername(BUNDLE.getString(USERNAME));
			config.setPassword(BUNDLE.getString(PASSWORD));
			config.setMaxConnectionsPerPartition(Integer.parseInt(BUNDLE.getString(MAX_CONNECTION)));
			pool = new BoneCP(config);
		} catch (Exception e) {
			e.printStackTrace();
			LOG.error(e.getMessage(), e);
			throw new DatabaseException(e);
		}
	}
	
	/**
	 * 关闭连接池
	 */
	public static void shutdown() {
		pool.shutdown();
	}
	
	/**
	 * @return 数据库连接
	 */
	public static Connection getConnection() {
		try {
			return pool.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
			LOG.error(e.getMessage(), e);
			throw new DatabaseException(e);
		}
	}

}

你可能感兴趣的:(DAO,数据库,String,jdbc,数据库连接池,slf4j)