一、连接池对象
a、JDBC访问数据库中、连接对象即用即毁开销太大、怎么管理多个连接对象又很麻烦、故需要一个专门管理连接的对象
b、程序运行时就创建N个连接对象、等着用户来使用
b、当连接不够时、可以增加连接数量来保证供应、但连接对象不能超过最大活跃数量
c、用户用完连接对象后、无需管理这个连接、关闭或不关闭连接、连接都会被连接池回收
连接池的使用
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;
}
}