JDBC高级

数据库连接池

数据库连接池的概念

1. 数据库连接的背景

数据库连接是一种关键的、有限的、昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出
对数据库连接的管理能显著影响到整个应用程序的性能指标,数据库连接池正是针对这个问题提出来的

数据库的连接

2. 数据库连接池

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。这项技术能明显提高对数据库操作的性能
在这里插入图片描述

自定义数据库连接池

DataSource

1. DataSource 接口概述

  • javax.sql.DataSource接口:数据源(数据库连接池)。Java 官方提供的数据库连接池规范(接口)
  • 如果想完成数据库连接池技术,就必须实现DataSource 接口
  • 核心功能:获取数据库连接对象:Connection getConnection();

2.自定义数据库连接池

  • 定义一个类,实现DataSource 接口
  • 定义一个容器,用于保存多个Connection 连接对象
  • 定义静态代码块,通过JDBC 工具类获取 10 个连接保存到容器中
  • 重写 getConnection 方法,从容器中获取一个连接并返回
  • 定义 getSize 方法,用于获取容器的大小并返回

归还连接

规范数据库连接的方式

  • 继承方式
  • 装饰设计模式
  • 适配设计模式
  • 动态代理方式

规范连接 - 继承方式

1.继承方式归还数据库连接的思想
  • 通过打印连接对象,发现DriverManager 获取的连接实现类是JDBC4Connection
  • 那我们就可以自定义一个类,继承JDBC4Connection 这个类,重写 close() 方法,完成连接对象的归还
2. 继承方式归还数据库连接的实现步骤
  • 定义一个类,继承JDBC4Connection
  • 定义 Connection 连接对象和连接池容器对象的成员变量
  • 通过有参构造方法完成对成员变量的赋值
  • 重写 close 方法,将连接对象添加到池中
3. 继承方式归还数据库连接存在的问题
  • 通过查看 JDBC 工具类获取连接的方法发现:我们虽然自定义了一个子类,完成了归还连接的操作。但是 DriverManager 获取的还是JDBC4Connection 这个对象,并不是我们的子类对象,而我们又不能整体 去修改驱动包中类的功能,所继承这种方式行不通!

归还连接-装饰设计模式

1. 装饰设计模式归还数据库连接的思想
  • 我们可以自定义一个类,实现Connection 接口。这样就具备了和JDBC4Connection 相同的行为了
  • 重写 close() 方法,完成连接的归还。其余的功能还调用mysql 驱动包实现类原有的方法即可
2. 装饰设计模式归还数据库连接的实现步骤
  • 定义一个类,实现Connection 接口
  • 定义 Connection 连接对象和连接池容器对象的成员变量
  • 通过有参构造方法完成对成员变量的赋值
  • 重写 close() 方法,将连接对象添加到池中
  • 剩余方法,只需要调用mysql 驱动包的连接对象完成即可
  • 在自定义连接池中,将获取的连接对象通过自定义连接对象进行包装
3.装饰设计模式归还数据库连接存在的问题
  • 实现 Connection 接口后,有大量的方法需要在自定义类中进行重写

归还连接-适配器设计模式

1. 适配器设计模式归还数据库连接的思想
  • 我们可以提供一个适配器类,实现Connection 接口,将所有方法进行实现(除了close方法)
  • 自定义连接类只需要继承这个适配器类,重写需要改进的close() 方法即可
2. 适配器设计模式归还数据库连接的实现步骤
  • 定义一个适配器类,实现Connection 接口
  • 定义 Connection 连接对象的成员变量
  • 通过有参构造方法完成对成员变量的赋值
  • 重写所有方法(除了close ),调用mysql驱动包的连接对象完成即可
  • 定义一个连接类,继承适配器类
  • 定义 Connection 连接对象和连接池容器对象的成员变量,并通过有参构造进行赋值
  • 重写 close() 方法,完成归还连接
  • 在自定义连接池中,将获取的连接对象通过自定义连接对象进行包装
3. 适配器设计模式归还数据库连接存在的问题
  • 自定义连接类虽然很简洁了,但适配器类还是我们自己编写的,也比较的麻烦

动态代理

  • 动态代理:在不改变目标对象方法的情况下对方法进行增强

  • 组成
    被代理对象:真实的对象
    代理对象:内存中的一个对象

  • 要求
    代理对象必须和被代理对象实现相同的接口

  • 实现
    Proxy.newProxyInstance()

归还连接-动态代理方式

1. 动态代理方式归还数据库连接的思想
  • 我们可以通过 Proxy 来完成对 Connection 实现类对象的代理
  • 代理过程中判断如果执行的是close 方法,就将连接归还池中。如果是其他方法则调用连接对象原来 的功能即可
2. 动态代理方式归还数据库连接的实现步骤
  • 定义一个类,实现DataSource 接口
  • 定义一个容器,用于保存多个Connection连接对象
  • 定义静态代码块,通过JDBC 工具类获取 10 个连接保存到容器中
  • 重写 getConnection 方法,
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值