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; }
    @Override
    public 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 mapper
        PUBLIC "-//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 {

    @Autowired
    private 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 {

    @Autowired
    private IUserService3 iUserService3;

    @Test
    public void testTransfer(){
        iUserService3.transfer("czh","wpj",1000.0);
    }
}

7.2.6 结果

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

未完待续。。。。
  1. Spring和SpringMVC整合 【SSM整合篇】三. SSM整合+事务+单元测试案例 完结 (共四章)
发布了42 篇原创文章 · 获赞 8 · 访问量 2438

猜你喜欢

转载自blog.csdn.net/TheNew_One/article/details/103897975