SSM整合篇】三. SSM整合+事务+单元测试案例 第三章(共四章)

2024-03-28 18:32

本文主要是介绍SSM整合篇】三. SSM整合+事务+单元测试案例 第三章(共四章),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Spring+SpringMvc+MyBatis整合+事务+单元测试案例 第三章

github源码(day56-ssm-transaction)https://github.com/1196557363/ideaMavenProject

对一些知识点不懂可以参考 SSM整合篇】一. Spring+SpringMvc+MyBatis简单案例

该案例接上章【SSM整合篇】三. SSM整合+事务+单元测试案例 第二章(共四章)

7.test事务配置

7.1 在day56-ssm-transaction新建一个表

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (`name` varchar(11) NOT NULL,`account` double(8,2) DEFAULT NULL,PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `user` VALUES ('czh', '10000.00');
INSERT INTO `user` VALUES ('wpj', '100000.00');

7.2 新建实体类,dao,mapper,service及serviceImpl

7.2.1 User
package com.wpj.bean;/*** ClassName: User* Description:** @author JieKaMi* @version 1.0* @date: 2020\1\8 0008 21:01* @since JDK 1.8*/
public class User {private String name;private Double account;public User() {}public User(String name, Double account) {this.name = name;this.account = account;}public String getName() { return name; }public void setName(String name) { this.name = name; }public Double getAccount() { return account; }public void setAccount(Double account) { this.account = account; }@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", account=" + account +'}';}
}
7.2.2 IUserDao3
(我的项目在一个project的Module里 IUserDao和 IUserDao2 重复了 所以取名 IUserDao3,后面一一对应)
package com.wpj.dao;/*** ClassName: IUserDao* Description:** @author JieKaMi* @version 1.0* @date: 2020\1\8 0008 21:03* @since JDK 1.8*/
public interface IUserDao3 {/*** 扣钱* @param outName  扣钱方* @param money    扣多少钱*/void out(@Param("name") String outName,@Param("money") Double money);/*** 得钱* @param inName 得钱方* @param money  得多少钱*/void in(@Param("name") String inName,@Param("money") Double money);
}
7.2.3 IUserDao3.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.wpj.dao.IUserDao3"><update id="out">UPDATE user SET account=account-#{money} WHERE name=#{name}</update><update id="in">UPDATE user SET account=account+#{money} WHERE name=#{name}</update>
</mapper>
7.2.4 IUserService3
package com.wpj.service;/*** ClassName: IUserService3* Description:** @author JieKaMi* @version 1.0* @date: 2020\1\8 0008 21:11* @since JDK 1.8*/
public interface IUserService3 {// 记住这个方法名void transfer(String outName,String inName,Double money);}
7.2.5 UserServiceImpl3
package com.wpj.service.impl;import com.wpj.dao.*;
import com.wpj.service.*;
import org.springframework.beans.factory.annotation.*;
import org.springframework.stereotype.*;/*** ClassName: UserServiceImpl3* Description:** @author JieKaMi* @version 1.0* @date: 2020\1\8 0008 21:12* @since JDK 1.8*/
@Service
public class UserServiceImpl3 implements IUserService3 {@Autowiredprivate IUserDao3 iUserDao3;public void transfer(String outName, String inName, Double money) {System.out.println("正在扣钱。。。。");iUserDao3.out(outName,money);// 模拟错误int i = 10 / 0;		System.out.println("正在得钱。。。。");iUserDao3.in(inName,money);System.out.println("操作完成。。。。");}
}
7.2.5 Test
import com.wpj.bean.*;
import com.wpj.service.*;
import org.apache.ibatis.session.*;
import org.junit.*;
import org.junit.runner.*;
import org.springframework.beans.factory.annotation.*;
import org.springframework.test.context.*;
import org.springframework.test.context.junit4.*;import javax.sql.*;
import java.util.*;/*** ClassName: SSMTest* Description:** @author JieKaMi* @version 1.0* @date: 2020\1\8 0008 17:51* @since JDK 1.8*/@RunWith(value= SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = "classpath:spring-context.xml")
public class SSMTest {@Autowiredprivate IUserService3 iUserService3;@Testpublic void testTransfer(){iUserService3.transfer("czh","wpj",1000.0);}
}
7.2.6 结果

在这里插入图片描述
错误如愿的报错出来了,如果事务配置成功的话,应该会事务回滚,也就是说数据不会发生变化,可是去看数据库发现 执行了扣钱发生异常,事务竟然没有回滚! 是事务的问题吗?非也~。咱们看看配置事务的配置文件 spring-context.xml
在这里插入图片描述
这个时候只需要修改service的方法名 为 事务策略能匹配的就行,或者在添加一个写操作。

未完待续。。。。
  1. Spring和SpringMVC整合 【SSM整合篇】三. SSM整合+事务+单元测试案例 完结 (共四章)

这篇关于SSM整合篇】三. SSM整合+事务+单元测试案例 第三章(共四章)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/856379

相关文章

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

SpringBoot 整合 Grizzly的过程

《SpringBoot整合Grizzly的过程》Grizzly是一个高性能的、异步的、非阻塞的HTTP服务器框架,它可以与SpringBoot一起提供比传统的Tomcat或Jet... 目录为什么选择 Grizzly?Spring Boot + Grizzly 整合的优势添加依赖自定义 Grizzly 作为

MySQL不使用子查询的原因及优化案例

《MySQL不使用子查询的原因及优化案例》对于mysql,不推荐使用子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,本文给大家... 目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EX

spring6+JDK17实现SSM起步配置文件

《spring6+JDK17实现SSM起步配置文件》本文介绍了使用Spring6和JDK17配置SSM(Spring+SpringMVC+MyBatis)框架,文中通过示例代码介绍的非常详细,对大家的... 目录1.配置POM文件2.在resource目录下新建beans.XML文件,用于配置spirng3

springboot整合gateway的详细过程

《springboot整合gateway的详细过程》本文介绍了如何配置和使用SpringCloudGateway构建一个API网关,通过实例代码介绍了springboot整合gateway的过程,需要... 目录1. 添加依赖2. 配置网关路由3. 启用Eureka客户端(可选)4. 创建主应用类5. 自定

Redis事务与数据持久化方式

《Redis事务与数据持久化方式》该文档主要介绍了Redis事务和持久化机制,事务通过将多个命令打包执行,而持久化则通过快照(RDB)和追加式文件(AOF)两种方式将内存数据保存到磁盘,以防止数据丢失... 目录一、Redis 事务1.1 事务本质1.2 数据库事务与redis事务1.2.1 数据库事务1.

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

SpringBoot整合kaptcha验证码过程(复制粘贴即可用)

《SpringBoot整合kaptcha验证码过程(复制粘贴即可用)》本文介绍了如何在SpringBoot项目中整合Kaptcha验证码实现,通过配置和编写相应的Controller、工具类以及前端页... 目录SpringBoot整合kaptcha验证码程序目录参考有两种方式在springboot中使用k

Spring Boot 中整合 MyBatis-Plus详细步骤(最新推荐)

《SpringBoot中整合MyBatis-Plus详细步骤(最新推荐)》本文详细介绍了如何在SpringBoot项目中整合MyBatis-Plus,包括整合步骤、基本CRUD操作、分页查询、批... 目录一、整合步骤1. 创建 Spring Boot 项目2. 配置项目依赖3. 配置数据源4. 创建实体类

SpringBoot嵌套事务详解及失效解决方案

《SpringBoot嵌套事务详解及失效解决方案》在复杂的业务场景中,嵌套事务可以帮助我们更加精细地控制数据的一致性,然而,在SpringBoot中,如果嵌套事务的配置不当,可能会导致事务不生效的问题... 目录什么是嵌套事务?嵌套事务失效的原因核心问题:嵌套事务的解决方案方案一:将嵌套事务方法提取到独立类