JavaWeb基础知识day13——MVC思想&&MySQL事务与Java事务
MVC
MVC思想概述
MVC:
就是将业务逻辑,代码,显示相分离的一种思想
M:model 模型 作用:主要是封装数据,封装对数据的访问
V:view 视图 作用:主要是用来展示数据 一般是jsp担任的
C:controller 控制 作用:接受请求,找到相应的javabean完成业务逻辑
在Java项目中的体现:
分层:javaee的三层架构
web
作用:
展示数据 ----jsp
-----servlet-------
接受请求
找到对应的service,调用方法 完成逻辑操作
信息生成或者页面跳转
service 业务层
作用:
完成业务操作
调用dao
dao(data access object 数据访问对象)
作用:
对数据库的curd操作
事务
事务概述:
就是一件完整的事情,包含多个操作单元,这些操作要么全部成功,要么全部失败.
例如:转账
包含转出操作和转入操作.
mysql中的事务:
mysql中事务默认是自动提交,一条sql语句就是一个事务.
开启手动事务方式
方式1:关闭自动事务.(了解)
set autocommit = off;
方式2:手动开启一个事务.(理解)
start transaction;-- 开启一个事务
commit;-- 事务提交
rollback;-- 事务回滚
扩展:
oracle中事务默认是手动的,必须手动提交才可以.
java中的事务:
Connection接口的api:★
setAutoCommit(false);//手动开启事务
commit():事务提交
rollback():事务回滚
扩展:了解 Savepoint还原点
void rollback(Savepoint savepoint) :还原到那个还原点
Savepoint setSavepoint() :设置还原点
Connection事务处置
例如:转账
一旦出现异常,钱飞了.
要想避免这事情,必须添加事务,在service添加事务.
为了保证所有的操作在一个事务中,必须保证使用的是同一个连接
在service层我们获取了连接,开启了事务.如何dao层使用此连接呢????
方法1:
向下传递Connection参数.注意连接应该在service释放
方法2:
可以将connection对象绑定当前线程上
jdk中有一个ThreadLocal类,
ThreadLocal 实例通常是类中的 private static 字段,
它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。
ThreadLocal的方法:
构造:
new ThreadLocal()
set(Object value):将内容和当前线程绑定
Object get():获取和当前线程绑定的内容
remove():将当前线程和内容解绑
内部维护了map集合
map.put(当前线程,内容);
map.get(当前线程)
map.remove(当前线程)
事务总结:
事务的特性:★★★【面试题】
ACID【Atomicity、Consistency、Isolation、Durability】
原子性:事务里面的操作单元不可切割,要么全部成功,要么全部失败
一致性:事务执行前后,业务状态和其他业务状态保持一致.
隔离性:一个事务执行的时候最好不要受到其他事务的影响
持久性:一旦事务提交或者回滚.这个状态都要持久化到数据库中
不考虑隔离性会出现的读问题★★
脏读: 在一个事务中,读取到另一个事务没有提交的数据
不可重复读: 在一个事务中,两次查询的结果不一致(针对的update操作)
虚读(幻读): 在一个事务中,两次查询的结果不一致(针对的insert操作)
通过设置数据库的隔离级别来避免上面的问题(理解)
read uncommitted 读未提交 上面的三个问题都会出现
read committed 读已提交 可以避免脏读的发生
repeatable read 可重复读 可以避免脏读和不可重复读的发生
serializable 串行化 可以避免所有的问题
四种隔离级别的效率
read uncommitted>read committed>repeatable read>serializable
四种隔离级别的安全性
read uncommitted<read committed<repeatable read<serializable
开发中绝对不允许脏读发生.
mysql中默认级别:repeatable read
oracle中默认级别:read committed
- Java First Day 基础知识
- java 框架基础知识(8)----国际化信息-->MVC
- java基础知识13-javaUI2
- JavaWeb开发知识总结(内省,MVC,事务)
- Java基础知识强化13:Java中单例模式案例使用
- Java基础知识强化之IO流笔记12:递归之递归解决问题的思想(图解)
- Java基础知识_毕向东_Java基础视频教程笔记(13)
- java 框架基础知识(9)----HTTP报文-->MVC
- Java基础知识强化之IO流笔记13:递归之不死神兔问题(斐波那契数列)
- java基础第22天_mysql存储过程、事务隔离
- JAVA基础知识(13)-----Lock接口
- 【java基础知识】连接mysql的工具类编写
- 【mysql基础知识】解决java写入数据库时中文乱码的问题
- JAVA相关基础知识总结(连载)-13
- Java语言的基础知识13
- java 框架基础知识(7)----事务基础知识-->Spring事务管理
- 学习Spring必学的Java基础知识(7)----事务基础知识
- 学习Spring必学的Java基础知识(7)----事务基础知识
- IT十八掌作业_java基础第22天_mysql存储过程、事务隔离
- Java基础知识强化20:面向对象和面向过程的思想对比