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(当前线程)