Spring JDBC与事务管理5:Spring编程式事务;

说明:

(1)有关事务内容可以快速参考【MySQL综合应用二:事务机制一:事务的基本介绍】及附近文章;【JDBC入门九:JDBC实现事务(十分重要!!!)】;

(2) 【Spring JDBC模块】中也有事务控制;其中就包括编程式事务和声明式事务;本篇博客介绍编程式事务;

目录

一:编程式事务简介

二:代码演示:没有使用【编程式事务控制】的情况

首先,创建EmployeeService类: 

然后,在applicationContext.xml中配置EmployeeService对象,并注入EmployeeDao:

然后,在JdbcTemplateTestor测试类中编写测试方法:

三:问题分析

引入logback日志依赖:

通过日志信息,分析【未使用控制事务】时的执行过程:

四:使用【编程式事务】去控制(核心!)

首先,在applicationContext.xml中配置transactionManager事务管理器对象:

然后,在需要事务控制的类(EmployeeService类)中,添加并注入transactionManager:

然后,就是【编程式事务】的实际使用了:

测试1:【执行过程中出现异常】的案例:

测试2:【执行过程中没有出现异常】的案例:

五:【编程式事务】有缺点,引出【声明式事务】


一:编程式事务简介

 

(1)【Spring JDBC模块】通过引入TransactionManager对象(事务管理器),来控制事务;

(2)TransactionManager对象提供了两个核心方法:commit()和rollback()方法;(PS:在【JDBC入门九:JDBC实现事务(十分重要!!!)】中Connection对象也有自己的commit()和rollback()方法来控制事务;都是相通的)

(3)本篇博客的代码沿用自【Spring JDBC与事务管理4:Spring JDBC四:Jdbc Template新增、更新、删除方法;(update();)】;


 

二:代码演示:没有使用【编程式事务控制】的情况

需求:公司入职10名新员工,需要把这10名新员工批量导入Employee表中;要求是,要么一次性全部导入,要么一个也不导入;

首先,创建EmployeeService类: 

EmployeeService:

package com.imooc.spring.jdbc.service;

import com.imooc.spring.jdbc.dao.EmployeeDao;
import com.imooc.spring.jdbc.entity.Employee;

import java.util.Date;

public class EmployeeService {
    private EmployeeDao employeeDao;
    public void batchImport() {
        for (int i = 1; i <= 10; i++) {
            Employee employee = new Employee();
            employee.setEno(8000 + i);
            employee.setEname("员工"+i);
            employee.setSalary(4000f);
            employee.setDname("研发部");
            employee.setHiredate(new Date());
            employeeDao.insert(employee);
        }
    }

    public EmployeeDao getEmployeeDao() {
        return employeeDao;
    }

    public void setEmployeeDao(EmployeeDao employeeDao) {
        this.employeeDao = employeeDao;
    }
}

然后,在applicationContext.xml中配置EmployeeService对象,并注入EmployeeDao:

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值