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

相关文章

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

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

springboot整合TDengine全过程

《springboot整合TDengine全过程》:本文主要介绍springboot整合TDengine全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录环境准备JDBC-JNI方式准备依赖实体类Mapper配置类测试类RESTful方式实体类配置类测试类总结

Python get()函数用法案例详解

《Pythonget()函数用法案例详解》在Python中,get()是字典(dict)类型的内置方法,用于安全地获取字典中指定键对应的值,它的核心作用是避免因访问不存在的键而引发KeyError错... 目录简介基本语法一、用法二、案例:安全访问未知键三、案例:配置参数默认值简介python是一种高级编

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再