春+ SpringMvc + MyBatisのトランザクションの統合+ +第III章ユニットテストケース
githubの源码(day56-SSM-トランザクション)https://github.com/1196557363/ideaMavenProject
いくつかの知識は、参照を理解することはできません] SSMは、記事を統合する。春+ SpringMvc + MyBatisの単純なケースを
章に接続された場合[章]統合SSM III。第II章+積分+トランザクションユニットテストケースSSM(4つの章)
7.testトランザクション構成
7.1 day56-SSM-トランザクションは、新しいテーブルを作成します
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、マッパー、サービスおよびserviceImpl
7.2.1ユーザー
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
(モジュールプロジェクトのIUserDaoでプロジェクトのIとIUserDao2はそうIUserDao3という名前の、1対1の対応の背後に繰り返し)
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テスト
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結果
間違ったそうデータは変更されないこと、トランザクションが正常に設定されている場合、それはトランザクションをロールバックする必要があり、うち与えられないために、お金のデータベースを控除の実装は、例外が発生した見て、トランザクションにもロールバックではありません!これは、事務の質問ですか?確かに〜。トランザクションプロファイル、ばねのcontext.xmlの設定で見てみましょう
唯一のサービスメソッドの名前業務ポリシーを変更する必要があり、この時間は、ライン上にマッチした、または書き込み操作を追加しています。
継続するには。。。。
- スプリングとSpringMVC統合[SSM]統合三条。SSM統合業務+ +ユニットテストケースの端部(4つの章)