iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringAOP事务管理的示例详解
  • 176
分享到

SpringAOP事务管理的示例详解

2024-04-02 19:04:59 176人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录转账案例-环境搭建步骤1:准备数据库表步骤2:创建项目导入jar包步骤3:根据表创建模型类步骤4:创建Dao接口步骤5:创建Service接口和实现类步骤6:添加jdbc.pro

转账案例-环境搭建

步骤1:准备数据库

之前我们在整合Mybatis的时候已经创建了这个表,可以直接使用

create database spring_db character set utf8;
use spring_db;
create table tbl_account(
    id int primary key auto_increment,
    name varchar(35),
    money double
);
insert into tbl_account values(1,'Tom',1000);
insert into tbl_account values(2,'Jerry',1000);

步骤2:创建项目导入jar包

项目的pom.xml添加相关依赖

<dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.16</version>
    </dependency>

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.6</version>
    </dependency>

    <dependency>
      <groupId>Mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>

  </dependencies>

步骤3:根据表创建模型类

public class Account implements Serializable {

    private Integer id;
    private String name;
    private Double money;
	//setter...getter...toString...方法略    
}

步骤4:创建Dao接口

public interface AccountDao {

    @Update("update tbl_account set money = money + #{money} where name = #{name}")
    void inMoney(@Param("name") String name, @Param("money") Double money);

    @Update("update tbl_account set money = money - #{money} where name = #{name}")
    void outMoney(@Param("name") String name, @Param("money") Double money);
}

步骤5:创建Service接口和实现类

public interface AccountService {
    
    public void transfer(String out,String in ,Double money) ;
}

@Service
public class AccountServiceImpl implements AccountService {

    @Autowired
    private AccountDao accountDao;

    public void transfer(String out,String in ,Double money) {
        accountDao.outMoney(out,money);
        accountDao.inMoney(in,money);
    }

}

步骤6:添加jdbc.properties文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_db?useSSL=false
jdbc.username=root
jdbc.passWord=root

步骤7:创建JdbcConfig配置类

public class JdbcConfig {
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String userName;
    @Value("${jdbc.password}")
    private String password;

    @Bean
    public DataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(userName);
        ds.setPassword(password);
        return ds;
    }
}

步骤8:创建MybatisConfig配置类

public class MybatisConfig {

    @Bean
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
        SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
        ssfb.setTypeAliasesPackage("com.itheima.domain");
        ssfb.setDataSource(dataSource);
        return ssfb;
    }

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.itheima.dao");
        return msc;
    }
}

步骤9:创建SprinGConfig配置类

@Configuration
@ComponentScan("com.itheima")
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MybatisConfig.class})
public class SpringConfig {
}

步骤10:编写测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class AccountServiceTest {

    @Autowired
    private AccountService accountService;

    @Test
    public void testTransfer() throws IOException {
        accountService.transfer("Tom","Jerry",100D);
    }

}

事务管理

上述环境,运行单元测试类,会执行转账操作,Tom的账户会减少100,Jerry的账户会加100。

这是正常情况下的运行结果,但是如果在转账的过程中出现了异常,如:

@Service
public class AccountServiceImpl implements AccountService {

    @Autowired
    private AccountDao accountDao;

    public void transfer(String out,String in ,Double money) {
        accountDao.outMoney(out,money);
        int i = 1/0;
        accountDao.inMoney(in,money);
    }

}

以上就是Spring aop事务管理的示例详解的详细内容,更多关于Spring AOP事务管理的资料请关注编程网其它相关文章!

--结束END--

本文标题: SpringAOP事务管理的示例详解

本文链接: https://www.lsjlt.com/news/151937.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringAOP事务管理的示例详解
    目录转账案例-环境搭建步骤1:准备数据库表步骤2:创建项目导入jar包步骤3:根据表创建模型类步骤4:创建Dao接口步骤5:创建Service接口和实现类步骤6:添加jdbc.pro...
    99+
    2022-11-13
  • MySQL中的长事务示例详解
    前言: 『入门MySQL』系列文章已经完结,今后我的文章还是会以MySQL为主,主要记录下近期工作及学习遇到的场景或者自己的感悟想法,可能后续的文章不是那么连贯,但还是希望大家多多支持。言归正传,本篇文章主...
    99+
    2022-10-18
  • React Redux管理库示例详解
    目录相同点不同点配置总共分为三部分Provider前言: 什么是redux?redux和vuex一样,都被统称为状态管理库,是核心数据存贮与分发、监听数据改变的核心所在。 可以简单说...
    99+
    2022-12-20
    React Redux React Redux管理库
  • MySQL事务管理的作用详解
    目录1.为何使用事务管理2.数据库事务的原理3.什么是事务3.1 事务的特性ACID3.2 事务的并发问题3.3 隔离级别4.Spring事务管理1.为何使用事务管理 可以保证数据的完整性。事务(Transaction)...
    99+
    2022-08-25
  • mysql事务管理操作详解
    本文实例讲述了mysql事务管理操作。分享给大家供大家参考,具体如下: 本文内容: 什么是事务管理 事务管理操作 回滚点 默认的事务管理 首发日期:2018-04-18 什么是事务管理: ...
    99+
    2022-05-23
    mysql 事务管理
  • Spring详细解读事务管理
    目录什么是事务Spring事务配置Spring事务传播行为1. PROPAGATION_REQUIRED2. PROPAGATION_SUPPORTS3. PROPAGATION_R...
    99+
    2022-11-13
  • Spring事务管理详细讲解
    目录事务回顾spring事务操作基于注解声明事务@Transactional注解使用事务传播机制事务隔离级别@Transactional其他属性基于XML 声明式事务完全注解开发说明...
    99+
    2022-11-13
    Spring事务管理 Spring事务原理 Spring事务管理机制
  • MySQL数据操作管理示例详解
    目录一、查看表和查看表的定义二、删除表三、创建表四、表类型五、修改表六、完整性1、数据完整性2、使用约束实现数据完整性3、在数据表上添加约束4、删除约束七、添加数据八、修改数据九、删除数据十、SQL语句中的运算符算数运算...
    99+
    2022-09-23
  • vue全局数据管理示例详解
    目录记账页面标签页面新增将API封装到window用computed计算属性记账页面标签页面新增 记账页面和标签页面都可以新增标签。可是现在有一个bug。在标签页面新增标签之后,在记...
    99+
    2022-11-13
  • Flutter状态管理Provider的使用示例详解
    目录前言计数器全局状态总结前言 Provider是三大主流状态管理框架官方推荐使用的框架,它是基于官方数据共享组件InheritedWidget实现的,通过数据改变调用生命周期中的d...
    99+
    2022-11-13
    Flutter状态管理Provider Flutter Provider
  • Vue 事件处理函数的绑定示例详解
    目录正文Vue 的事件处理绑定事件修饰符按键修饰符Vue 为什么会在 HTML 中监听事件?正文 在 JS 中「事件」是不需要绑定的,浏览器自带了许多的事件,每个事件都可以去绑定「...
    99+
    2023-02-23
    Vue 事件处理函数绑定 Vue 函数绑定
  • JavaScript事件的委托(代理)的用法示例详解
    目录简介示例:事件委托写法1:事件委托写法2:每个子元素都绑定事件示例:新增元素写法1:事件委托写法2:每个子元素都绑定事件简介 说明 本文用示例介绍JavaScript中的事件(E...
    99+
    2022-11-12
  • MySQL基础篇(06):事务管理,锁机制案例详解
    本文源码:GitHub·点这里 || GitEE·点这里 一、锁概念简介 1、基础描述 锁机制核心功能是用来协调多个会话中多线程并发访问相同资源时,资源的占用问题。锁机制是一个非常大的模块,贯彻MySQL的几大核心难点模块:索引,...
    99+
    2018-06-26
    MySQL基础篇(06):事务管理,锁机制案例详解
  • 关于C/C++内存管理示例详解
    1、内存分配方式 在C++中,内存分成五个区,分别是堆、栈、自由存储区、静态存储区和常量存储区。 1) 栈 执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这...
    99+
    2022-11-12
  • Flutter状态管理Bloc使用示例详解
    目录前言两种使用模式Cubit模式最后前言 目前Flutter三大主流状态管理框架分别是provider、flutter_bloc、getx,三大状态管理框架各有优劣,本篇文章将介绍...
    99+
    2022-11-13
    Flutter状态管理Bloc Flutter Bloc
  • FlutterWillPopScope拦截返回事件原理示例详解
    目录一、 WillPopScope用法二、使用WillPopScope遇到的问题三、 WillPopScope原理四、嵌套Navigator无法监听物理返回按键的解决办法一、 Wil...
    99+
    2022-11-13
  • SpringBoot超详细讲解事务管理
    目录1. 事务的定义2. 事务的特性3. 事务的隔离性4. 事务管理5. 示例1. 事务的定义 事务是由 N 步数据库操作序列组成的逻辑执行单元,这系列操作要么全部执行,要么全部放弃...
    99+
    2022-11-13
  • Spring 事务管理详解及使用
    ✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识...
    99+
    2023-09-02
    spring java mybatis
  • JavaScript中事件委托的示例详解
    目录事件流事件委托结尾大家好,我是前端西瓜哥。今天我们来认识一下事件委托。 所谓事件委托,就是将原本应该在当前元素绑定的事件,放到它的祖先元素上,让祖先元素来委托处理。 事件流 事件...
    99+
    2022-11-13
  • Java事务管理学习之JDBC详解
    什么是Java事务通常的观念认为,事务仅与数据库相关。事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩...
    99+
    2023-05-31
    java jdbc 事务管理
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作