JDBC高级
JDBC的事务环境准备事务的概念事务指的是逻辑上的一组操作,组成这组操作各个逻辑单元要么全都成功,要么全都失败。 事务环境准备创建数据库和表 JDBC的事务管理连接池的概述什么是连接池连接池是装有连接的容器,使用连接的话,可以从连接池中进行获取,使用完成之后将连接归还给连接池. 为什么要学习连接池连接对象创建和销毁是需要耗费时间的,在服务器初始化的时候就初始化一些连接。把这些连接放入到内存中,使用的时候可以从内存中获取,使用完成之后将连接放入连接池中。从内存中获取和归还的效率要远远高于创建和销毁的效率。(提升性能)。 自定义连接池自定义连接池的实现步骤编写一个类实现DataSource接口重写getConnection方法初始化多个连接在内存中编写归还连接的方法定义连接池的代码实现自定义连接池的问题及解决分析自定义连接池的问题使用接口的实现类完成的构造MyDataSource dataSource = new MyDataSource(); 这种方式不方便程序的扩展. 额外提供了方法归还连接// 归还连接: dataSource.addBack(conn); 这种方式增加使用连接池的用户的难度。 自定义连接池的问题解决如果不提供自定义的方法就可以解决这个问题,但是我们的连接要如何归还到连接池呢? 解决分析的思路原来在Connection中是有一个close方法的,colse方法完成了连接的销毁.能不能做一个是,将原有的连接的close方法改为归还. - 现在要做的事情就是将原有的close方法的逻辑改为归还(增强一个类中的方法).
- 如何增强一个类中的方法
*******继承这种增强是最简单的,但是是有使用条件的,必须能够控制这个类的构造!!!!**class Man{ public void run(){ System.out.println(“跑…”);}}class SuperMan extends Man{ public void run(){ System.out.println(“飞…”);}- 二种:采用装饰者模式:
- ***** 装饰者模式使用条件:
- 一、增强的类和被增强的类实现相同的接口
- 二、在增强的类中获得被增强的类的引用
//定义接口interface Waiter{ public void server();}//实现类public class Waitress implements Waiter{//重写方法 public void server(){ System.out.println(“服务中…”);}}//再定义一个类,实现waiter的接口public class WaitressWrapper implements Waiter{ private Waiter waiter; public WaitressWrapper(Waiter waiter){ this.waiter = waiter;}//重写方法 public void server(){ System.out.println(“微笑…”) //这是调用原有的方法 waiter.server();}}自定义连接池的问题解决代码实现使用装饰者模式增强Connection中的close方法为了简化编程,提供一个模板类(模板类原封不动的将接口中的所有方法都实现,但是都没有增强)。编写一个装饰类继承模板类。在装饰类中只需要增强某一个方法即可。 Druid开源连接池的使用Druid 的概述Druid阿里旗下开源连接池产品,使用非常简单,可以与Spring框架进行快速整合。 Druid开源连接池的使用二使用配置方式完成连接池的使用C3P0开源连接池的使用C3P0的连接池的概述C3P0的连接池的使用配置文件里面注释用#号 DBUtils的概述什么是DBUtils对JDBC的简单封装,而且没有影响性能。 为什么要学习DBUtils因为JDBC手写比较麻烦,而且有非常多的代码是类似的。比如获得连接,预编译SQL,释放资源等..那么可以将这些代码抽取出来放到工具类中。将类似的代码进行抽取。大大简化JDBC的编程。 DBUtils的APIDBUtils的API的概述QueryRunner对象:核心运行类在一般情况下如果执行CRUD的操作: 构造:QueryRunner(DataSource ds);方法:int update(String sql,Object… args);T query(String sql,ResultSetHandler rsh,Object… args);如果有事务管理的话使用另一套完成CRUD的操作 构造: QueryRunner();方法:int update(Connection conn,String sql,Object… args);T query(Connection conn,String sql,ResultSetHandler rsh,Object… args);
|