一、DataSource接口:
- java为数据库连接池提供的公共接口各个厂商需要让自己的连接池实现这个接口
二、装饰者模式:
- 介绍:装饰者模式,是 23种常用的面向对象软件的设计模式之一. 动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更加有弹性的替代方案。
- 作用:改写已存在的类的某个方法或某些方法
- 条件:1. 增强类和被增强类实现的是同一个接口
- 增强类里面要拿到被增强类的引用
- 注意:如果知道父类的名称可以使用继承,但是你不知道,又要增强某个方法,可以使用装饰者模式
//接口
public interface House{
//层数
void floorNumber();
//房子价值
void houseValue();
}
//被增强类
public class MyHouse implements House {
@Override
public void floorNumber() {
System.out.println("一共有三层楼");
}
@Override
public void houseValue() {
System.out.println("房子价值66万");
}
}
//增强类
public class NewMyHouse implements House{
//被增强的引用
private House house;
public NewMyHouse(House house) {
this.house= house;
}
@Override
//不需要增强
public void floorNumber() {
house.floorNumber();
}
@Override
//需要增强
public void houseValue() {
System.out.println("房子价值88万");
}
}
三、使用第三方连接池
1、C3P0:
- 介绍:开源免费的连接池,目前使用它的开源项目:spring、hibernate
- 使用:1. 导入数据库驱动包和c3p0的jar包
- 添加配置文件c3p0-config.xml,放在src的目录下
- 获取数据源:DataSource ds = new ComboPoolDataSource();//会自动读取src目录下的c3p0-config.xml,所以不需要我们解析配置文件(配置文件名不能修改喔)
- 获取数据源后还是之前jdbc的操作获取Connection、statement和释放资源等操作。
<!--文件名:c3p0-config.xml-->
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/day18_db</property>
<property name="user">root</property>
<property name="password">1234</property>
<property name="initialPoolSize">5</property>
</default-config>
</c3p0-config>**
2、Druid:
- 介绍:阿里巴巴开发的号称为监控而生的数据库连接池,Druid是国内目前最好的数据库连接池。
- 使用:1. 导入数据库驱动包和druid的jar包
- 添加配置文件druid.properties,放在src的目录下
# 文件名:druid.properties
url=jdbc:mysql:///数据库名
# 用户名
username=root
# 密码
password=123456
driverClassName=com.mysql.jdbc.Driver
// 根据druid.properties创建配置文件对象
Properties properties = new Properties();
// 关联druid.properties文件
InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
properties.load(is);
// 创建DataSource
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
//获取数据源后还是之前jdbc的操作获取Connection、statement和释放资源等操作。
//......
四、JDBC事务的处理
- start transaction; 开启事务 --> connection.setAutoCommit(false) true -->自动提交打开 false -->自动提交关闭
- commit; 提交 --> connection.commit();//提交事务
- rollback; 回滚 --> connection.rollback();//回滚事务