spring提供的事务配置--纯注解

spring提供的事务--纯注解

模拟转账业务  ,出错需要事务回滚,没错正常执行

事务和数据库技术都是spring的内置提供的

1.三层架构

IAccountDao接口

package com.dao;

import com.domain.Account;

/**
 *
 * @date 2019/11/6 15:25
 */
public interface IAccountDao {
    Account findAllById(Integer id);
    Account findAccountByName(String name);
    void updateAccount(Account account);
}

IAccountDao实现类

package com.dao.impl;

import com.dao.IAccountDao;
import com.domain.Account;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 *  账户实现类
 * @date 2019/11/6 15:27
 */
@Repository("accountDao")
public class IAccountDaoImpl  implements IAccountDao {
    @Autowired
    private JdbcTemplate template;

    @Override
    public Account findAllById(Integer id) {
        List<Account> query = template.query("select * from account where id= ?", new BeanPropertyRowMapper<>(Account.class), id);
        return query.isEmpty()?null:query.get(0);
    }

    @Override
    public Account findAccountByName(String name) {
        List<Account> accounts = template.query("select * from account where name= ?", new BeanPropertyRowMapper<>(Account.class),name);
        if (accounts.isEmpty()){
            return  null;
        }
        if (accounts.size()>1){
            throw  new RuntimeException("结果集不唯一");
        }
        return accounts.get(0);
    }

    @Override
    public void updateAccount(Account account) {
        template.update("update account set name=?,money=? where id=?",account.getName(),account.getMoney(),account.getId());
    }
}

domain类

package com.domain;

import java.io.Serializable;

/**
 *
 * @date 2019/11/5 21:32
 */
public class Account implements Serializable {
    private Integer id;
    private String name;
    private Float money;

    @Override
    public String toString() {
        return "Account{" +
                "id=" + id +
                ", name=‘" + name + ‘\‘‘ +
                ", money=" + money +
                ‘}‘;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Float getMoney() {
        return money;
    }

    public void setMoney(Float money) {
        this.money = money;
    }
}

IAccountService类

package com.service;

import com.domain.Account;

/**
 *  账户业务层
 * @date 2019/11/7 9:26
 */
public interface IAccountService {
    //根据id查询账户信息
    Account findAllById(Integer integer);
    /*转账
    * 转出账户,转入账户,转账金额*/
    void transfer(String sourceName, String targetName, Float f);
}

service层

测试层

原文地址:https://www.cnblogs.com/july7/p/11812883.html

时间: 2024-10-12 02:21:59

spring提供的事务配置--纯注解的相关文章

spring声明式事务配置详解

spring声明式事务配置详解 君子不器 2013年06月16日 编程世界 5273次阅读 查看评论 理解Spring的声明式事务管理实现 本节的目的是消除与使用声明式事务管理有关的神秘性.简单点儿总是好的,这份参考文档只是告诉你给你的类加上@Transactional注解,在配置文件中添加('<tx:annotation-driven/>')行,然后期望你理解整个过程是怎么工作的.此节讲述Spring的声明式事务管理内部的工作机制,以帮助你在面对事务相关的问题时不至于误入迷途,回朔到上游平静

Spring声明式事务配置的两种策略SpringAop和Bean后处理器的代理BeanNameAutoProxyCreator

Spring的事务配置有两种:1编程式事务管理配置:2声明式事务管理配置.下面介绍两种声明式事务的配置,声明式事务相比于编程式事务代码耦合更低,无序书写任何事务管理的先关代码.两种声明式事务配置策略分别是:SpringAop事务管理和Bean后处理器的代理BeanNameAutoProxyCreator管理事务. 1.SpringAop事务管理配置 1.1.配置数据源: <bean id="pycDataSource" class="com.mchange.v2.c3p

Spring管理 hibernate 事务配置的五种方式

Spring配置文件中关于事务配置总是由三个组成部分,DataSource.TransactionManager和代理机制这三部分,无论是那种配置方法,一般变化的只是代理机制这块! 首先我创建了两个类,一个接口一个实现: Java代码   package com.dao; public interface UserDao { public void getUser(); } 实现: Java代码   package com.dao.impl; import org.springframework

spring框架——day02常用配置和注解

一,SpringMVC常用配置 1.springmvc默认加载的配置文件是WEB-INF下的springmvc-servlet.xml,而我们通常将配置文件放在项目的资源目录中,即classpath下,因此需要配置springmvc加载的配置文件地址. 将配置文件转移至resources中,改名,并修改web.xml: 2.上面的配置中所应用的处理器映射器.处理器适配器以及视图解析器都是默认的,可以修改为注解的使用方式. 在springmvc的配置文件中添加配置: <!--注解方式的处理器适配器

Spring的多事务配置(多个Transaction Manager)和使用方法

大多数项目只需要一个事务管理器.然而,有些项目为了提高效率.或者有多个完全不同又不相干的数据源,最好用多个事务管理器.机智的Spring的Transactional管理已经考虑到了这一点,首先分别定义多个transactional manager,并为qualifier属性指定不同的值:然后在需要使用@Transactional注解的时候指定TransactionManager的qualifier属性值或者直接使用bean名称.配置和代码使用的例子: <tx:annotation-driven/

Spring中常用的配置和注解详解

一.  Spring中常用的配置文件详解 Spring中的配置文件详解 1.<!-- 配置注解bean的扫描路径 该配置表示从cn包下开始扫描--> <context:component-scan base-package="cn"></context:component-scan> 2.<!-- 加载资源文件 其中Location表示从哪个路径加载配置文件properties--> <context:property-placeh

spring、mybatis事务配置和控制

springmybatis.xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springfram

Spring声明式事务配置与使用

1.配置: <context:component-scan base-package="com.vrvwh.wh01" /><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name=&

spring+mybatis的事务配置

出自:http://kinglixing.blog.51cto.com/3421535/723870 定义一个实体类:Emp.java package com.lixing.scm.entity; public class Emp {  private String id;  private String name;  private String sex;  private int age;  private String phone;  public String getId() {