JDBC
持久化概述
持久化(persistence)**: 把数据保存到可掉电式存储设备中以供之后使用。
数据持久化意味着将内存中的数据保存到硬盘上加以”固化”
而持久化的实现过程大多通过各种关系数据库来完成, 将内存中的数据存储在关系型数据库中
当然也可以存储在磁盘文件、XML数据文件中
而在 Java中,数据库存取技术只能通过 JDBC 来访问数据库。
JDBC 访问数据库的形式主要有两种:
1. 直接使用 JDBC 的 API 去访问数据库服务器 (MySQL/Oracle).
2. 间接地使用 JDBC 的 API 去访问数据库服务器.
第三方O/R Mapping工具,如 Hibernate, MyBatis 等.(底层依然是 JDBC )
JDBC 是 Java 访问数据库的基石,其他技术都是对 JDBC 的封装.
JDBC 概述 (Java DataBase Connectivity)
是一种用于执行 SQL 语句的 Java API,**可以为多种关系数据库提供统一访问
操作 JDBC 口诀
贾琏欲执事
- 加载注册驱动.
- 获取连接对象.
- 创建/获取语句对象.
- 执行SQL语句.
- 释放资源.
DAO 介绍和方法设计
DAO**(Data Access Object) 数据访问对象是一个面向对象的数据库接口
DAO层开发规范(重要,背)
规范就是王八的屁股—>龟腚(规定)
分包规范:**
域名倒写.项目模块名.组件;
cn.wolfcode.pss.util; // 存放工具类
cn.wolfcode.pss.domain; //装pss模块的domain类,模型对象.(Student)
cn.wolfcode.pss.dao; //装pss模块的dao接口.
cn.wolfcode.pss.dao.impl; //装pss模块的dao接口的实现类.
cn.wolfcode.pss.test; //暂时存储DAO的测试类,以后的测试类不应该放这里.
JDBC 的事务操作
事务(Transaction,简写为tx)
在数据库中 , 所谓事务是指一组逻辑操作单元 , 使数据从一种状态变换到另一种状态。
事务的ACID属性
- 原子性(Atomicity):原子在化学中,是最小单位,不可以再分割了.
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 - 一致性(Consistency): 包装数据的完整性.
事务必须使数据库从一个一致性状态变换到另外一个一致性状态。(数据不被破坏) - 隔离性(Isolation):Hibernate再讲
事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 - 持久性(Durability):
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响
事务相关注意事项
- 默认情况下,事务在执行完 DML 操作就自动提交.
- 查询操作,其实是不需要事务的.但是,一般的,我们在开发中都把查询放入事务中.
- 开发中,代码完全正确,没有异常,但是就是数据库中数据不变.
- 在 MySQL 中,只有 InnoDB 存储引擎支持事务,支持外键,而MyISAM 不支持事务.
- 以后事务我们不应该在 DAO 层处理,应该在 service 层控制.
- 事务在讲解Hibernate,MyBatis,Spring,项目的时候都会再讲.
连接池思想
基本属性:连接池存了连接对象,而连接对象依赖四要素,所以四要素是基本要求
driverClassName,url,username,password
其他属性:对连接对象做限制的配置
- 初始化连接数:5 在连接池中事先准备好5个Connection对象
- 最多连接数:10 在连接池中最多有10个Connection对象,其他客户端进入等待状态
- 最少连接数 : 3 在连接池中最少存在3个Connection对象
- 最长等待时间:5 min 使用5分钟来申请获取Connection对象,如果时间到还没有申请到,则提示,自动放弃
- 最长超时时间:10min 如果你在10分钟之内没有任何动作,则认为是自动放弃Connection对象.
11.2_常见的 DataSource 实现
DBCP : Spring 框架推荐的
C3P0 : Hibernate 框架推荐的
druid: 阿里巴巴的连接池(号称Java语言中性能最好的连接池).
Statement 和 PreparedStatement的区别(
PreparedStatement 存在的优势:
更好的可读性,可维护性.
可以提供更好的性能(预编译).MySQL 不支持 PreparedStatement 性能优化.
ement 和 PreparedStatement的区别(
PreparedStatement 存在的优势:
更好的可读性,可维护性.
可以提供更好的性能(预编译).MySQL 不支持 PreparedStatement 性能优化.
更安全,可以防止 SQL 注入的问题