IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> springboot事务管理 -> 正文阅读

[Java知识库]springboot事务管理

什么是事务?

我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作的结合。由于数据操作在顺序执行 的过程中,任何一步操作都有可能发生异常,异常会导致后续操作无法完成,此时由于业务逻辑并未正确的完成, 之前成功操作数据的并不可靠,需要在这种情况下进行回退。

事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都必须成功执行,只要有发生异常就 回退到事务开始未进行操作的状态。

事务管理是Spring框架中最为常用的功能之一,我们在使用Spring Boot开发应用时,大部分情况下也都需要使用事务。

eg:A转账给B,A转出去正常,B接收异常-----就不可以成功,就需要回退到A没有转账的状态。

1.创建service/UserService

package com.cc.springboot.service;

import com.cc.springboot.entity.User;

public interface UserService {
    Boolean addUser(User user);
}

? 定义了一个接口方法

2. 使用service,创建service/impl/UserServiceImple

package com.cc.springboot.service.impl;

import com.cc.springboot.dao.Repository;
import com.cc.springboot.entity.User;
import com.cc.springboot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;
//模拟事务管理


@Service
public class UserServiceImple implements UserService {

    @Autowired
    Repository repository;

    @Transactional  //当前方法开启事务管理
    @Override
    public Boolean addUser(User user) {
//        模拟转账:转出
         repository.save(new User("a","1"));
        repository.save(new User("aa","1"));
        repository.save(new User("aaa","1"));
        repository.save(new User("aaa","1"));
        repository.save(new User("aaaa","1"));


//        转入:模拟失败
        repository.save(new User("cccccc","1"));
        repository.save(new User("ccccccccc","1"));
         repository.save(user);
        return null;
    }
}

?注入的dao相当于数据库操作

?

?3.controller/UserController测试

package com.cc.springboot.controller;

import com.cc.springboot.dao.Repository;
import com.cc.springboot.entity.User;
import com.cc.springboot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.util.Optional;

@RestController
public class UserController {
   

    @Autowired
    UserService userService;
    @GetMapping("/user2")
    public User addUser2(User user){
        userService.addUser(user);
        return user;
    }
}

事务的步骤

1.在启动类上 ,使用 @EnableTransactionManagement?开启注解方式事务支持

2.在 Service层方法上添加 @Transactional?进行事务管理(不需要在表头,一般查看不需要事务)

3.如果使用 JPA?创建表则需要指定数据库引擎为 Innodb

配置文件中添加:database-platform: org.hibernate.dialect.MySQL57Dialect

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/jpa?serverTimezone=GMT%2B8
    driver-class-name: com.mysql.cj.jdbc.Driver


   #jpa相关配置
  jpa:
    hibernate:
      #会根据映射实体类自动创建或更新数据表
      ddl-auto: update
    #控制台打印sql语句
    show-sql: true
#    8指定如下方言: 创建的表类型是Innodb,才可以进行对事物的回滚。
    database-platform: org.hibernate.dialect.MySQL57Dialect

?

总结:

? entity-----------》数据库表的字段(getter,setter,构造方法)

? dao-----------》数据库操作(和数据库打交道,需要entity)

? service--------》事务管理(封装具体的业务,一个接口,定义方法)

? service-impl------》实现service(需要dao注入)

? controller--------》注入service,具体操作。(访问路径,怎样的增删改查)?

dao和service举例理解

dao封装了用户的增删改查。而业务上要求批量删除用户,Service就可以封装出一个批量删除用户的功能,但是实现只是循环调用dao的单个删除

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:11:18  更:2022-04-01 23:15:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:27:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码