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

相关文章

RabbitMQ消费端单线程与多线程案例讲解

《RabbitMQ消费端单线程与多线程案例讲解》文章解析RabbitMQ消费端单线程与多线程处理机制,说明concurrency控制消费者数量,max-concurrency控制最大线程数,prefe... 目录 一、基础概念详细解释:举个例子:✅ 单消费者 + 单线程消费❌ 单消费者 + 多线程消费❌ 多

SpringBoot整合Dubbo+ZK注册失败的坑及解决

《SpringBoot整合Dubbo+ZK注册失败的坑及解决》使用Dubbo框架时,需在公共pom添加依赖,启动类加@EnableDubbo,实现类用@DubboService替代@Service,配... 目录1.先看下公共的pom(maven创建的pom工程)2.启动类上加@EnableDubbo3.实

SpringBoot整合(ES)ElasticSearch7.8实践

《SpringBoot整合(ES)ElasticSearch7.8实践》本文详细介绍了SpringBoot整合ElasticSearch7.8的教程,涵盖依赖添加、客户端初始化、索引创建与获取、批量插... 目录SpringBoot整合ElasticSearch7.8添加依赖初始化创建SpringBoot项

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2