jdbc数据库连接池(druid)及dbutils

jar 包

 druid配置文件以及log4j的配置文件

#druid.properties
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/myschool?rewriteBatchedStatements=true
username=root
password=123456



#log4j配置文件
### \u8BBE\u7F6E###
log4j.rootLogger = debug,stdout,D,E

### \u8F93\u51FA\u4FE1\u606F\u5230\u63A7\u5236\u62AC ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### \u8F93\u51FADEBUG \u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7\u5230=/home/hao/Desktop/log4jTest.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = log4jTest.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### \u8F93\u51FAERROR \u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7\u5230=/home/hao/Desktop/log4jTest.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =log4jTest.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

学生类对象(建议使用abstract修饰类) 


import com.mysql.cj.jdbc.Blob;

public  class Student extends BaseDao<Student>{
	private String no;
	private String pwd;
	private String name;
	private String sex;
	private int gradeid;
	private String phone;
	private String address;
	private String birndate;
	private String email;
	private String id;
	private Blob img;
	public String getNo() {
		return no;
	}
	public void setNo(String no) {
		this.no = no;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getGradeid() {
		return gradeid;
	}
	public void setGradeid(int gradeid) {
		this.gradeid = gradeid;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getBirndate() {
		return birndate;
	}
	public void setBirndate(String birndate) {
		this.birndate = birndate;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public Blob getImg() {
		return img;
	}
	public void setImg(Blob img) {
		this.img = img;
	}
	public Student() {}
	public Student(String name) {
		this.name=name;
	}
	public Student(String no, String pwd, String name, String sex, int gradeid, String phone, String address,
			String birndate, String email, String id, Blob img) {
		super();
		this.no = no;
		this.pwd = pwd;
		this.name = name;
		this.sex = sex;
		this.gradeid = gradeid;
		this.phone = phone;
		this.address = address;
		this.birndate = birndate;
		this.email = email;
		this.id = id;
		this.img = img;
	}
	@Override
	public String toString() {
		return "Student [no=" + no + ", pwd=" + pwd + ", name=" + name + ", sex=" + sex + ", gradeid=" + gradeid
				+ ", phone=" + phone + ", address=" + address + ", birndate=" + birndate + ", email=" + email + ", id="
				+ id + ", img=" + img + "]";
	}
	
}

 封装的方法

import java.io.File;
import java.io.FileInputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.Array;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.apache.log4j.Logger;
import com.alibaba.druid.pool.DruidDataSourceFactory;


/**
 * 最终版本  version2.0(考虑事务)
 * @author 迷糊小马
 *
 */
public abstract class BaseDao<T> {
	/**
	 * 获取运行时类带有父类的泛型
	 */
	Class clazz=null;
	{
		Type genericSuperclass = this.getClass().getGenericSuperclass();
		ParameterizedType para=(ParameterizedType) genericSuperclass;
		Type[] actualTypeArguments = para.getActualTypeArguments();
		clazz=(Class) actualTypeArguments[0];
	}
	/**
	 * 添加log4j日志跟踪
	 */
		static Logger logger=Logger.getLogger(BaseDao.class.getName());
		/**
		 * 创建数据库连接池  切记连接池只创建一次
		 * 所有的数据库连接池都是DataSource的实现类;
		 *    			使用druid数据库连接池技术
		 */
		private static DataSource source=null;
		/**
		 * 获取连接
		 * @return
		 * @throws Exception
		 */
		static Properties pro=null;
		static {
			try {
				pro=new Properties();
				pro.load(new FileInputStream(new File("resources/druid.properties")));
			} catch (Exception e) {
					logger.info(e.getMessage());
			}
			
		}
		public  Connection getConnection() {
			Connection  conn=null;
			try {
				source=DruidDataSourceFactory.createDataSource(pro);
				conn = source.getConnection();		
			} catch (Exception e) {
				logger.info(e.getMessage());
			}
			
			return conn;
		}
		/**
		 * 增删改  考虑事务的连接
		 * @param conn  连接对象
		 * @param sql     待执行的SQL语句
		 * @param obj    可变长度的形参
		 * @return			受影响的行数
		 * @throws Exception 
		 */
		public int executeUpdate(Connection conn,String sql,Object...obj) throws Exception {
					QueryRunner runn=new QueryRunner();
					int count = runn.execute(conn, sql, obj);
					return count;
		}
		/**
		 * 查询  将查询到的字段封装到Map集合中,字段作为键
		 * @param conn
		 * @param sql
		 * @param obj
		 * @return   返回查询到的集合
		 * @throws SQLException
		 */
		public List<Map<String,Object>> executeQueryMap(Connection conn,String sql,Object...obj) throws SQLException{
			QueryRunner runn=new QueryRunner();
			MapListHandler handler=new MapListHandler();
			   List<Map<String, Object>> list = runn.query(conn, sql, handler, obj);
			   return  list;
		}
		/**
		 * 查询  将查询到的字段封装到list集合中
		 * @param conn	连接对象
		 * @param sql		数据库执行语句
		 * @param obj		可变形参
		 * @return	反悔查询到的内容
		 * @throws SQLException
		 */
		public List<T> executeQueryBean(Connection conn,String sql,Object...obj) throws SQLException{
				QueryRunner runn=new QueryRunner();
				BeanListHandler<T> handler =new BeanListHandler<T>(clazz);
				return runn.query(conn, sql, handler, obj);
		}
		/**
		 * 查询特殊字段
		 * @param conn	连接对象
		 * @param sql		待执行的SQL语句
		 * @param obj		可变长度的形参
		 * @return				返回查询到的特殊字段
		 * @throws SQLException
		 */
		public Object executeScalar(Connection conn,String sql,Object...obj) throws SQLException {
			QueryRunner runn=new QueryRunner();
			ScalarHandler<T> handler =new ScalarHandler<T>();
			return runn.execute(conn, sql, handler, obj);
		}
		/**
		 * 自定义查询表中的字段
		 * @param conn
		 * @param sql
		 * @param obj
		 * @return 	 返回自定义查询的集合
		 * @throws SQLException 
		 */
		public List<T> a(Connection conn,String sql,Object...obj) throws SQLException {
				QueryRunner runn=new QueryRunner();
				return runn.execute(conn, sql, new ResultSetHandler<T>() {
					@Override
					public T handle(ResultSet rs) throws SQLException {
						if(rs.next()) {
							String name = rs.getString("name");
							T t=null;
							try {
								t = (T) clazz.getDeclaredConstructor(String.class).newInstance(name);
							} catch (NoSuchMethodException | SecurityException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							} catch (InstantiationException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							} catch (IllegalAccessException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							} catch (IllegalArgumentException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							} catch (InvocationTargetException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
							return t;
						}
						return null;
					}
				}, obj);
				
		}
		/**
		 * 关闭资源
		 * @param conn
		 */
		public static void  allClose(Connection conn) {
			if(conn!=null)
					try {
						 conn.close();
					} catch (SQLException e) {
						logger.info(e.getMessage());
					}
		}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值