Day9_9 Java学习之Dao层模式与JDBC事务

目录

一、Dao层模式

Dao层模式的概述

入门级编写DAO层的结构

二、JDBC事务

JDBC的事务概述

 JDBC的事务使用介绍


一、Dao层模式

  • Dao层模式的概述

解析:

1.DAO(Data Access Object)模式就是写一个类,把访问数据库的代码封装起来。DAO在数据库与业务逻辑(Service)之间。

2.DAO层就是:数据访问层, 封装是jdbc相关的代码, 一个包

3.使用DAO的主要目的是:

3.1、实现层与层的技术隔离。

3.2、方便后续的维护及再开发。

4.编写DAO需要遵守以下规范:

4.1、面向接口编程

4.2、一个接口一个实现类

4.3、一个pojo类对应一个dao的接口 User --> UserDao(接口) -->UserDaoImpl(实现类)

​ Student -->StudentDao(接口) -->StudentDaoImpl(实现类) 

解析:pojo类就是实体类是对应数据库表的类

4.4、每个dao操作对应pojo类的增删改查方法

4.5、每个dao的方法一般来说操作一条sql语句

  • 入门级编写DAO层的结构

DAO层结构图如下所示:tips:下图中的Test包是我的测试类可以忽略掉。 

Dao层实现步骤如下:

1.按照自己的需求根据数据库表创建pojo实体类

2.在根据封装的思想写出util类,下图中util存放的是我的JDBCUtil工具类

3.再创建Dao包存放对应的实体类接口

4.再创建impl包存放接口的实现类,一个完整的Dao层就如下所示咯

特别注意:Dao层是一种开发的规范的思想,而不是具体的技术,我们只需要理解即可后续会有工具帮我们一键生成该DAO层。

Day9_9 Java学习之Dao层模式与JDBC事务_第1张图片

二、JDBC事务

  • JDBC的事务概述

解析:

1.事务是指是程序中一系列严密的逻辑操作,而且所有操作必须全部成功完成,否则在每个操作中所作的所有更改都会被撤消。可以通俗理解为:就是把多件事情当做一件事情来处理,例如:古语中的:一荣俱荣,一损俱损。

2.而在jDBC中的事务就是一连串SQL语句执行操作,且同一个事务下, 执行的一组sql语句,要就全部成功,要就全部失败。

3.事务的四大特征:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Duration),简称ACID;

3.1、原子性:操作这些指令时,要么全部执行成功,要么全部不执行。只要其中一个指令执行失败,所有的指令都执行失败,数据进行回滚,回到执行指令前的数据状态。

3.2、一致性:事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。

理解:例如:张三和李四两个用户一共有3000块钱,在此之间无论他们进行如何的转账操作,进行几次转账操作,事务结束以后两个人加起来的钱应该还是3000,这就是事务的一致性。

3.3、隔离性:是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

理解:这个有点像我们线程中的同步锁的使用,在一个事务正在操作一张表时,别的事务不可以操作这个表,也就是形成了隔离,这是因为数据库锁: 表锁(锁住整张表),行锁(锁住某一行数据),在具有InnoDB引擎mysql才支持行锁。

3.4、持久性:当事务正确完成后,它对于数据的改变是永久性的。

理解:就是当我们的事务正确的完成提交之后,不管数据库那边是否刚好关闭或者数据库意外的崩溃了,在该数据库下次启动时就会直接写入,意思就是说我们的事务只要正确成功提交就一定会写入数据库。

  •  JDBC的事务使用介绍

解析:

1.在jdbc中处理事务,都是通过Connection完成的!所以:同一事务中所有的操作,都在使用同一个Connection对象!

2.Connection的三个方法与事务相关:

2.1、setAutoCommit(boolean):设置是否为自动提交事务,如果true(默认值就是true)表示自动提交,也就是每条执行的SQL语句都是一个单独的事务,如果设置false,那么就相当于开启了事务了;con.setAutoCommit(false)表示开启事务!!!

2.2、commit():提交结束事务;con.commit();表示提交事务

2.3、rollback():回滚结束事务。con.rollback();表示回滚事务

特别注意:我们的jdbc默认是自动提交, 所以我们不需要手动提交了, 而且,在实际开发中,我们的事务是加在业务层,而不是加在DAO层,所以我们在这里就不深入的探讨了,等小博学到业务层的编写会给读者大大们详细讲述的。

你可能感兴趣的:(JDBC操作,MySQL数据库,java,学习,数据库)