JDBC高级 JDBC事务的概念:
把扣钱和收钱绑定到一起,要么同时成功,要么同时失败.
如:银行转账
准备工作:
创建数据库和表
事务管理的API
Connection来管理事务
JDBC事务管理测试类:
事务管理核心思想:
业务逻辑的操作要使用同一个Connection对象
事务管理的核心操作步骤:
业务逻辑的操作
完成转账案例:
//导入数据库jar包,创建lib文件
//创建测试类@Test
//修改配置文件
//定义对象
//获得连接 (获得连接的对象conn)
//开启事务 (conn.setAutoCommit(false)自动提交)
---业务逻辑操作---
//编写SQL
//预编译SQL (获得pstmt对象)
//设置参数 (setString/Int)
//执行SQL (executeUpdate)
---业务逻辑操作---
//提交事务
//回滚事务(catch)conn.rollback(),捕捉异常
连接池的概述:
装有连接的容器,使用时,从连接池中获取,使用完后把连接放回池子.
为什么学习连接池:
连接的创建和销毁耗费时间,提升程序运行效率
自定义连接池:
DataSource是连接池的接口.使用接口实现类完成的构造(new对象).
创建一个List集合,存放连接对象,(集合中添加连接)初始化连接,获得连接remove
实现步骤:
//引入jar包和自定义工具类JDBCUtils
//编写一个类实现DataSource接口
//
//从连接池中获得连接的方法(重写getConnection)
测试连接池步骤:
//@Test
//定义对象
//从连接池中获取try/catch
//
(了解)自定义连接池的问题:
1. 使用接口实现类完成的构造(new对象),不方便程序的扩展
2. 自己定义了方法归还连接,使用者还得记住你自己定义的方法.
高可用:
高性能:
面向接口的编程思想:
public void asd(List list){}
设计模式:装饰者模式,技能的拔高.
接口a: 实现类b(实现接口a)
增强类c(实现接口a)
自定义连接池解决方法:
增强一个类中的方法:
1.采用继承的方式
最简单的方式
使用条件:必须能够控制这个类的构造,即知道被继承的这个类是谁.
2.采用装饰者模式
使用条件:增强的类和被增强的类实现相同的接口,即实现类和包装类实现相同的接口
在增强的类中获得被增强的类的引用
3.动态代理的方式
自定义连接池解决代码:
为了简化编程(重写Connection的所有方法),提供一个模板类,
增强Connection的close方法
//实现Connection接口
//构造方法传过来Connection
开源网站:开源中国,github,码云
数据库连接池只管连接,别的步骤都一样.
配置文件用#注释
★★Druid开源连接池:
阿里旗下开源连接产品.
1.手动设置数据库连接的参数
2.配置方式设置参数
key是人家设定好的
//引入jar包:mysql和Druid,Buildpath一下
//@Tset
//定义对象
//创建配置文件对象Properties
//加载load配置文件
//根据配置文件,创建连接池
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
//获得连接conn
//编写SQL
//预编译
//设置参数
//执行SQL
//遍历
//释放资源
★★C3P0开源连接池:
配置文件的方式:按照它提供的规范设置使用.
//导包Build path下
//创建配置文件,命名为c3p0-config.xml,修改参数(数据库名),放到src下
//创建连接池ComboPooledDataSource dataSource=new ComboPooledDataSource()
//从连接池(dataSource)中获得连接
★★改写工具类:
一个应用只创建一次连接池就行了.
步骤:
//创建连接池ComboPooledDataSource
//获得连接的方法
//获得连接池的方法
//释放资源方法
JDBC的工具类:DBUtils
DButils为web阶段用到的,封装JDBC,抽取成工具类,简化代码.
DBUtils的API:
QueryRunner对象,核心运行类
★★QueryRunner qr =new QueryRunner(DataSource);
qr.query 查询操作
qr.update增删改操作
DBUtils的增删改操作步骤:update
@Test
//创建核心类QueryRunner,传入连接池
QueryRunner qr = new QueryRunner(JDBCUtils2.getDataSource());
//qr.update();
qr.update("insert into user values (null,?,?)","ddd",1000);
DBUtils的查询操作步骤:query
1.查询表中的多条记录,把每条记录封装成一个对象,放进一个List集合.
2.查询一条记录,直接使用这个封装记录的对象.
如果实体类中的属性和表中属性名称不一致;
表中列名和结果集中列名有关;
|
|