小鸡炸

导航

连接池和DBUtils学习笔记

一、连接池对象

a、JDBC访问数据库中、连接对象即用即毁开销太大、怎么管理多个连接对象又很麻烦、故需要一个专门管理连接的对象
b、程序运行时就创建N个连接对象、等着用户来使用
b、当连接不够时、可以增加连接数量来保证供应、但连接对象不能超过最大活跃数量
c、用户用完连接对象后、无需管理这个连接、关闭或不关闭连接、连接都会被连接池回收
连接池的使用
a、配置参考地址:https://github.com/alibaba/druid/wiki
b、简单的druid.property属性配置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://locahost:3306/test
username=root
password=123456
initialSize=3
maxActive=10
maxWait=60000
c、JAVA代码操作连接池对象
public static void main(String[] args)throws Exception{
	//创建属性对象
	Properties properties=new Properties();
	//加载属性文件
	properties.load(DBTest.class.getResourceAsStream("/druid.property"));
	//创建连接池对象
	DataSource ds = DruidDataSourceFactory.createDataSource(properties);
	//获取连接
	Connection conn = ds.getConnection();
}

二、DBUtils的使用

1、DBUtils的作用
a、主要是封装了JDBC的代码,简化dao层的操作、帮助程序员,提高程序的开发效率、Dbutils是由Apache公司提供
b、DbUtils:连接数据库对象----jdbc辅助方法的集合类,线程安全
2、使用步骤
a、需要导入的jar包:①MySql驱动 ②c3p0包 ③DbUtils包
b、添加druid配置文件
d、可以自行添加一个JDBCUtils工具类:用来获取c3p0连接池对象
3、QueryRunner:是DBUtils操作数据库的核心类、增删改查等操作都靠QueryRunner类
a、增删改查
public static void main(String[] args)throws Exception{
		//创建属性对象
		Properties properties=new Properties();
		//加载属性文件
		properties.load(DBTest.class.getResourceAsStream("/druid.property"));
		//创建连接池对象
		DataSource ds = DruidDataSourceFactory.createDataSource(properties);
   		//创建QueryRunner对象
		QueryRunner queryRunner=new QueryRunner(ds);
		//增删改查操作数据库、参数用?好替代,值直接在后面添加
		int i = queryRunner.update("insert into student(name,pwd,img,classid) values(?,?,?,?)","admin","123",1,1);
		//查询的使用
		List<Student> list = queryRunner.query("select * from student", new BeanListHandler<>(Student.class));
		for (Student student : list) {
			System.out.println(student);
		}
		System.out.println("over");
	}
b、查询的适配器ResultSetHandle
适配器类 作用
ArrayHandler 将查询结果的第一行数据,保存到Object数组中
ArrayListHandler 将查询的结果,每一行先封装到Object数组中,然后将数据存入List集合
BeanHandler 将查询结果的第一行数据,封装到user对象
BeanListHandler 将查询结果的每一行封装到user对象,然后再存入List集合
ColumnListHandler 将查询结果的指定列的数据封装到List集合中
MapHandler 将查询结果的第一行数据封装到map结合(key列名,value列值)
MapListHandler 将查询结果的每一行封装到map集合(key列名,value列值),再将map集合存入List集合
BeanMapHandler 将查询结果的每一行数据,封装到User对象,再存入mao集合中(key列名,value列值)
KeyedHandler 将查询的结果的每一行数据,封装到map1(key列名,value列值 ),然后将map1集合(有多个)存入map2集合(只有一个)
ScalarHandler ScalarHandler
c、自定义类实现ResultSetHandler<返回值类型>
//泛型决定返回值类型
public class StuentResultSetHandler implements ResultSetHandler<List<Student>>{
	@Override
	public List<Student> handle(ResultSet arg0) throws SQLException {
		List<Student> list=new ArrayList<Student>();
		
		while (arg0.next()) {
			Student info=new Student();
			//需要封装的数据
			list.add(info);
		}
		return list;
	}
}

posted on 2022-01-19 11:05  小鸡炸  阅读(39)  评论(0编辑  收藏  举报