Spring-声明式事务(xml)

这篇博客详细介绍了Spring中使用XML配置进行声明式事务管理。内容包括项目目录、事务管理的概念、ACID原则、代码示例以及具体的事务配置步骤。通过示例展示了从数据表、实体类、Dao、Service到Controller的事务处理流程,并最终展示执行结果。
摘要由CSDN通过智能技术生成

1.1 项目目录(xml配置)

1.2 spring事务管理

事务定义

事务(transaction)一般是指要做的或者所做的事情。在程序中,尤其是在操作数据库的程序中,指的是访问并且可能更新数据库中数据项的一个执行单元。

这个执行单元由事务开始(begin transaction)和事务结束(end transaction)之间执行的全部操作组成

事务ACID原则

事务具有4个基本特性:原子性、一致性、隔离性、持久性。也就是我们常说的ACID原则

原子性(Atomicity)

  • 一个事务已经是一个不可再分割的工作单位。事务中的全部操作要么都做;要么都不做

一致性(Consistency)

  • 事务必须是使得数据库状态从一个一致性状态,转变到另外一个一致性状态。也就是说在事务前,和事务后,被操作的目标资源状态一致。
    比如银行转账案例中,转账前和转账后,总账不变。

隔离性(Isolation)

  • 一个事务的执行不能被其他事务的影响。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,多个并发事务之间不能相互干扰。

持久性(Durability)

  • 一个事务一旦提交,它对数据库中数据的改变会永久存储起来其他操作不会对它产生影响。

1.3 代码示例

数据表

-- 创建账户表
create table account(
	id int primary key auto_increment,
	name varchar(40),
	money float
)ENGINE=InnoDB character set utf8 collate utf8_general_ci;

-- 初始化新增三个账户
insert into account(name,money) values('kebe',1000);
insert into account(name,money) values('curry',1500);
insert into account(name,money) values('james',2000);

select * from account;

编写实体类

package cn.guardwhy.domain;

/**
 * 账户实体类
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Account {
   
    // 成员变量
    private int id;
    private String name;
    private Float money;
}

结果集映射类

package cn.guardwhy.rowmapper;

import cn.guardwhy.domain.Account;
import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 账户结果集映射类
 */
public class AccountRowMapper implements RowMapper<Account>{
   

    /**
     *每一行记录,调用一次该方法
     */
    public Account mapRow(ResultSet rs, int index) throws SQLException {
   

        // 创建Account
        Account account = new Account();

        account.setId(rs.getInt("id"));
        account.setName(rs.getString("name"));
        account.setMoney(rs.getFloat("money"));

        return account;
    }
}

持久层(Dao)

dao接口

package cn.guardwhy.dao;

import cn.guardwhy.domain.Account;

/**
 * 账户dao接口
 */
public interface AccountDao {
   

    /**
     * 根据账户id查询账户
     */
    Account findAccountById(Integer accountId);

    /**
     * 根据账户名称查询账户
     */
    Account findAccountByName(String accountName);

    /**
     * 更新账户
     */
    void updateAccount(Account account);
}

AccountDaoImpl

package cn.guardwhy.dao.impl;

import cn.guardwhy.dao.AccountDao;
import cn.guardwhy.domain.Account;
import cn.guardwhy.rowmapper.AccountRowMapper;
import org.springframework.jdbc.core.Jdb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值