博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring事务管理2----编程式事务管理
阅读量:6583 次
发布时间:2019-06-24

本文共 3203 字,大约阅读时间需要 10 分钟。

编程式事务管理

  通过使用将Spring框架提供的TransactionTemplate模板注入到业务层来进行事务管理,这样对业务层原来的代码修改过多。不利于项目的后期维护。

以下是声明式事务管理的具体代码实现:

环境搭建

Dao层

package com.sdf.spring;/** * @author AT * 转账dao层 */public interface AccountDao {    /**     * 转出钱     * @param outer     * @param money     */    public void remove(String outer,Double money);    /**     * 转入钱     * @param input     * @param money     */    public void add(String input,Double money);}

dao层实现类

package com.sdf.spring;import org.springframework.jdbc.core.support.JdbcDaoSupport;/** * 转账dao层实现 */public class AccountDaoimpl extends JdbcDaoSupport implements AccountDao{    /**     * 转出钱     * @param outer     * @param money     */    @Override    public void remove(String outer, Double money) {        String sql = "update account set money = money - ? where name = ?";        this.getJdbcTemplate().update(sql, money,outer);    }    /**     * 转入钱     * @param input     * @param money     */    @Override    public void add(String input, Double money) {        String sql = "update account set money = money + ? where name = ?";        this.getJdbcTemplate().update(sql, money,input);    }    }

service业务层

package com.sdf.spring;/** * @author AT * 转账业务接口 */public interface AccountSevice {    public void transfer(String input,String out,Double money);//消费}

service业务层实现类

/** * @author AT *  编程式事务管理 */public class AccountServiceImpl implements AccountSevice {        @Resource(name="accountDao")    private AccountDao accountDao;    //在业务类中注入事务模板    @Resource(name="transactionTemplate")    private TransactionTemplate transactionTemplate;    @Override    public void transfer(final String input, final String out,final  Double money) {//        accountDao.remove(out, money);//        int a = 1/0;//        accountDao.add(input, money);        transactionTemplate.execute(new TransactionCallbackWithoutResult() {            @Override            protected void doInTransactionWithoutResult(TransactionStatus status) {                accountDao.add(input, money);                int a = 1/0;//模拟转账过程中发生故障                accountDao.remove(out, money);            }        });    }                public void setAccountDao(AccountDao accountDao) {        this.accountDao = accountDao;    }    public void setTransactionTemplate(TransactionTemplate transactionTemplate) {        this.transactionTemplate = transactionTemplate;    }}

applicationContext.xml配置文件

测试类

/** * @author AT * 测试转账信息     编程式事务管理 */@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext.xml")public class AccountTest {    @Resource(name="accountService")    private AccountSevice accountService;    @Test    public void test01(){        accountService.transfer("A", "B", 100d);    }    public void setAccountService(AccountSevice accountService) {        this.accountService = accountService;    }}

 

转载于:https://www.cnblogs.com/kuoAT/p/7803324.html

你可能感兴趣的文章
mysql alter table
查看>>
芯片测试
查看>>
在源代码中插入防止盗版代码片段的方式
查看>>
hdu 3367 Pseudoforest(最大生成树)
查看>>
一个人,一则故事,一份情愫,一个世界……
查看>>
ffserver联合ffmpeg建立媒体服务器
查看>>
下载稻草人下来刷新+gallery
查看>>
删除浏览器浏览器删除cookie方法
查看>>
微软URLRewriter.dll的url重写的简单使用(实现伪静态)
查看>>
leetcode -- Combination Sum II
查看>>
1z0-052 q209_7
查看>>
PIN码计算锦集
查看>>
[Unity3D]再次点击以退出程序
查看>>
架构师的97种习惯
查看>>
PHP 开发 APP 接口 学习笔记与总结 - XML 方式封装通信接口
查看>>
IT基础架构规划方案之实际网络设计案例
查看>>
Navicat for MySQL 使用SSH方式链接远程数据库(二)
查看>>
poj 1274The Perfect Stall
查看>>
HDU 4720 Naive and Silly Muggles (外切圆心)
查看>>
垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
查看>>