什么是JDBC?
定义:
JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型
优点:
直接底层操作,提供了很简单、便捷的访问数据库的方法,跨平台性比较强。灵活性比较强,可以写很复杂的SQL语句。
缺点:
因为JAVA是面向对象的,JDBC没有做到使数据能够面向对象的编程,使程序员的思考仍停留在SQL语句上。
作用:
通过java操作数据库
原理:
JDBC只是一套规范接口,真正实现的是各种的驱动,可以访问自己数据库的API被称之为驱动。
使用步骤:
1、导入jar包
2、加载(注册)数据库驱动(到baiJVM)。
3、建立(获读取)数据库连接zhi。
4、创建(获取)数据库操作对象。
5、定义操作的SQL语句。
6、执行数据库操作。
7、获取并操作结果集。
8、关闭对象,回收数据库资源(关闭结果集–>关闭数据库操作对象–>关闭连接)。
应用场景:
JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果
Connetion(连接)
- 创建Statement对象
- 管理事务(ACID)
- 原子性 A
- 一致性 C
- 隔离性 I
- 持久性 D
Statement(语句)
- 封装SQL语句
- 执行SQL语句
- DML:结果为int
- DQL:ResultSet
ResultSet
1.存储结构
List<Map<String, Object>>
class ResultSet {
List<Map<String, Object>> data;
int p = 0;
Map<String, Object> curData;
public boolean next() {
if (p > data.size()) return false;
p++;
curData = data.get(p);
return true;
}
public get(String key) {
return curData.get(key);
}
}
2.作用: 封装mysql 服务器响应的数据
三层结构
- dao
- service
- web 【servlet(Controller)】
web -> service -> dao
junit
- 导包(idea中可以直接alt + enter)
- 写Test注解
对象创建过程
DriverManager -> Connetction -> Statement -> ResultSet
为什么会有工具类:
工具类目的
- 去掉重复代码,去重
- 实现步骤
- 编写配置文件
- 加载配置文件,赋值
- 编写方法获取链接
- 释放资源方法
为什么配置信息写在配置文件中要好一些?
- 不需要去修改java代码
- 配置文件不会常驻内存,在使用时重新加载文件(可以在程序运行时动态修改配置文件)
类加载器的作用
- 目的:将我们编写的class文件,加载到jvm内存中(永久代)
事务管理
- 使用对象:Connection对象
- 事务方法:
- 开启事务:setAutoCommit(false)
- 如何提交:commit()
- 回滚:rollback()
- 账户,转账案列
数据库连接池
- 作用: 避免重复创建链接, 提升程序的执行效率
C3P0数据库链接池
- 使用步骤:
- 导包
- 配置信息(c3p0-config.xml)
- 直接创建CombopooledDataSource
C3P0测试
- 是否能够正常获取到maxPoolSize个链接(验证方式是每一个对象的地址值是不同的)
- 关闭(归还)链接后是否还能获取到被关闭的链接
Druid
- 使用步骤:
- 导包(druid包 + MySQL驱动)
- 配置文件编写
- 代码编写:
- 加载配置文件
- 通过DruidDataSourceFactory获取DataSource
数据库连接池工具类
-
目的:
-
简化(封装)DataSource的创建步骤
-
一个程序中只需要维护一个DataSource
-
步骤
-
私有工具类的构造方法
-
静态代码块中实现Datasource的初始化
-
加载配置文件
-
创建DataSource
- 提供获取Connection的方法
- 释放资源
JDBCTemplate
- 目标: 直接传入SQL语句即可
- 需要对象:
- DataSource
- update方法实现
- SQL
- 参数:Object可变参数
- 具体实现
- 判断参数个数和原信息中的参数个数是否一致
- 执行SQL获取结果
- 释放资源
- 返回结果
BeanHandler作用
- 他是一种策略的实现, 这种策略是将ResultSet解析为一个Object
策略设计模式
- 执行者(谁执行策略)
- 策略(策略接口)
- 策略实现
- …
- 调用者
- 创建策略传递给执行