当前位置:   article > 正文

springboot开发论坛学习 ---- 3.3+3.4_spring boot 3.3

spring boot 3.3

帖子详情

DiscusPostMapper

增加查看帖子的方法

    //增加查看帖子的方法
    DiscussPost selectDiscussPostById(int id);

//在discuss-mapper.xml中
<!-- 实现查看帖子的select语句 -->
    <select id="selectDiscussPostById" resultType="DiscussPost">
        select <include refid="selectFields"></include>
        from discuss_post
        where id = #{id}
    </select>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

DiscussPostService

增加一个查询方法

//添加一个查看帖子的方法
    public DiscussPost findDiscussPostById (int id) {
        return discussPostMapper.selectDiscussPostById(id);
    }
  • 1
  • 2
  • 3
  • 4

DiscussPostController

在controller处理查询请求

//处理查看帖子的请求
    @RequestMapping(path = "/detail/{discussPostId}", method = RequestMethod.GET)
    public String getDiscussPost(@PathVariable("discussPostId") int discussPostId, Model model) {
        //查询帖子
        DiscussPost post = discussPostService.findDiscussPostById(discussPostId);
        model.addAttribute("post", post);
        //查询帖子的作者
        User user = userService.findUserById(post.getUserId());
        model.addAttribute("user", user);

        return "/site/discuss-detail";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

index.html

  • 在帖子标题上增加访问详情页面的链接

discuss-detail.html

  • 处理静态资源的访问路径

  • 复用index.html的header区域

  • 显示标题、作者、发布时间、帖子正文等内容

事务管理

为添加评论做准备

回顾

  • 什么是事务
    事务是由N步数据库操作序列组成的逻辑执行单元,这系列操作要么全执行,要么全放弃执行。
  • 事务的特性(ACID)
  1. 原子性(Atomicity):事务是应用中不可再分的最小的执行体。
  2. 一致性(Consistency):事务执行的结果,须使数据从一个一致性状态,变为另一个一致性状态。
  3. 隔离性(Isolation):各个事务的执行互不干扰,任何事务的内部操作对其他的事务都是隔离的。
  4. 持久性(Durability):事务一旦提交,对数据所做的任何改变都要记录到永久存储器中。

事务的隔离性(面试重要)

  • 常见的并发异常
    • 第一类丢失更新、第二类丢失更新。
    • 脏读、不可重复读、幻读。
  • 常见的隔离级别(由上到下安全级别逐级递增) ---- 互联网应用中一般都选择中间的级别,因为它既能满足我业务的需要,保证我业务的安全性
    • Read Uncommitted:读取未提交的数据。
    • Read Committed:读取已提交的数据。
    • Repeatable Read:可重复读。
    • Serializable:串行化,序列化。可以解决所有的并发异常,但是它需要对数据加锁,而加锁会降低数据库处理的性能,使得性能下降得很快。
      在这里插入图片描述
      第一类丢失更新:如果不做事务的隔离,就会发生这样的问题
      在这里插入图片描述
      第二类丢失更新:
      在这里插入图片描述
      脏读:
      在这里插入图片描述
      不可重复读:查询一条数据导致不一致
      在这里插入图片描述
      幻读:查询多条数据导致不一致
      在这里插入图片描述

实现机制 — 数据库保障事务的实现

  • 悲观锁(数据库自带的实现机制) – 其认为如果并发就一定会有问题,必须提前加锁
    • 共享锁(S锁)
      事务A对某数据加了共享锁后,其他事务只能对该数据加共享锁,不能加排他锁。
    • 排他锁(X锁)
      事务A对某数据加了排他锁后,其他事务对该数据既不能加共享锁,也不能加排他锁。
  • 乐观锁(自定义)
    • 版本号、时间戳等
      在更新数据前,检查版本号是否发生变化。若变化则取消本次更新,否则就更新数据(版本号+1)

Spring事务管理

Transaction Management

声明式事务 – 平常优选选第一种,简单

  • 通过XML配置,声明某方法的事务特征。

  • 通过注解,声明某方法的事务特征

编程式事务 – 业务逻辑复杂,选择第二种

  • 通过 TransactionTemplate 管理事务,并通过它执行数据库的操作。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/572998
推荐阅读
相关标签
  

闽ICP备14008679号