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

相关文章

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma

SpringBoot整合jasypt实现重要数据加密

《SpringBoot整合jasypt实现重要数据加密》Jasypt是一个专注于简化Java加密操作的开源工具,:本文主要介绍详细介绍了如何使用jasypt实现重要数据加密,感兴趣的小伙伴可... 目录jasypt简介 jasypt的优点SpringBoot使用jasypt创建mapper接口配置文件加密

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

MySQL中实现多表查询的操作方法(配sql+实操图+案例巩固 通俗易懂版)

《MySQL中实现多表查询的操作方法(配sql+实操图+案例巩固通俗易懂版)》本文主要讲解了MySQL中的多表查询,包括子查询、笛卡尔积、自连接、多表查询的实现方法以及多列子查询等,通过实际例子和操... 目录复合查询1. 回顾查询基本操作group by 分组having1. 显示部门号为10的部门名,员

Seata之分布式事务问题及解决方案

《Seata之分布式事务问题及解决方案》:本文主要介绍Seata之分布式事务问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Seata–分布式事务解决方案简介同类产品对比环境搭建1.微服务2.SQL3.seata-server4.微服务配置事务模式1

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring