JavaWeb基础(9):MVC&事务

(一)MVC

(1)MVC

  • MVC模型
    • Module 主要是封装数据,封装对数据的访问(User、DAO)
    • View 主要作用是展示数据(JSP)
    • Control 接受请求找到对应的JavaBean处理业务逻辑(Servlet)

(2)Javabean+JSP

  • 表单提交的数据到JSP页面,封装为一个JavaBean
    • 使用<jsp:useBean >
    <!--防止中文乱码-->
    <% request.setCharacterEncoding("UTF-8"); %>
    <!--将表单中的数据封装为一个JavaBean-->
    <jsp:useBean id="u" class="com.mio4.web.domain.User"> </jsp:useBean>
    <jsp:setProperty name="u" property="name"/>
    <jsp:setProperty name="u" property="password"/>

    <!--从JavaBean中获取数据-->
    <jsp:getProperty name="u" property="name"/><br/>
    <jsp:getProperty name="u" property="password"/><br/>

(3)JavaEE三层架构

  • Web 显示层
    • JSP+Servlet:展示内容 接受请求
  • Service 业务逻辑层
    • 调用DAO
  • DAO 数据访问层
    • 操纵数据库

(二)事务

事务:对于一系列操作,要么全部执行成功,要么全部执行失败
例如银行中的转账:A转出钱,B转入钱,要么都成功,要么都失败

(1)数据库事务

  • 数据库事务(Transaction)
    • 对于一系列SQL操作,要么全部执行成功,要么全部执行失败
  • start transaction;开启一个事务
  • commit;事务提交
  • rollback;回滚

(2)Java事务

  • 使用java.sql.Connection对象控制Java中的事务
    • connection.setAutoCommit(false); //关闭自动提交
    • connection.commit(); //事务提交
    • conn.rollback(); //事务回滚
  • 需要在Service中创建Connection对象来开启和关闭事务
    • 1.使用参数,将Connection传递到DAO中
    • 2.使用ThreadLocal中的set()和get()方法将Connection绑定(可以实现一个对象在同一个线程内共享)

(3)事务

  • 事务特性ACID
    • Atomicity 原子性:所有的操作要么全部执行成功,要么全部执行失败
    • Consistency 一致性:事务执行前后整个系统稳定,比如在银行转账前后总的钱数是不变的
    • Isolation 隔离性:事务之间不会相互影响(一个事务执行时不会受到其他线程事务的影响)
    • Durability 持久性:对于事务提交和回滚,改变需要被持久化到数据库中(永久记录下来)
  • 不考虑隔离性会出现的读问题(除了幻读都能在MySQL中进行实验)
    • 脏读:读到了其他事务回滚前的数据。比如事务A修改了数据X但没有提交,事务B读取了X,此时A回滚事务,则B形成了脏读
    • 不可重复读:在同一个事务中,两次查询的结果不一样
    • 幻读:事务A首先读到了符合条件的n条数据,事务B然后让符合条件的数据增加了m条,这时事务A再次读取时会读到n+m条数据,产生幻读
  • 数据库隔离级别
隔离级别隔离级别可避免情况
read uncommited读未提交
read commited读已提交脏读
repeatable read可重复读不可重复读 脏读
serializable串行化脏读 不可重复读 幻读
set session transaction isolation level read uncommitted; //设置隔离级别为read uncommited

select @@tx_isolation; //查看数据库隔离级别
  • 隔离级别比较(既然隔离级别越高越安全,为什么不通用serializable隔离级别呢?效率)
    • 隔离级别越高,效率越低
  • 脏读是必须避免的情况

模拟银行转账代码:https://github.com/mio4/Learn-Java/tree/master/Head First Java Web/BasicDemo12

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值