博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring 事务入门
阅读量:4980 次
发布时间:2019-06-12

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

定义:

一系列的动作,被当成一个单独的工作单元,要么都完成,要么全部不起作用(失败回滚)。

之前的事务处理:JDBC与Hibernate中的事务处理——与try...catch...finally...一起用。

Spring中的事务处理:编程式,声明式。
Spring从事务管理的API中抽象出一套独立事务机制。事务管理代码能独立于特点的具体技术。

 

使用方法:

建立beans.xml

 

准备工作:配置数据源对象。

1.配置事务管理器。

DataSourceTransactionManager类

dataSource属性注入

2.在配置文件中启用事务注解 

把tx命名空间加进来。

 

 3.添加事务注解。在类中使用的方法上添加这个注解:@Transactional 

  @Transactional//事务注解        @Override    public void delete(String code) {        workDao.deleteByInfoCode(code);        infoDao.delete(code);            }

 

下面看一个实例:

准备工作:导入c3p0、Spring框架、Mysql的jar包,并配置好

db.properties

 

driverClass=com.mysql.jdbc.DriverjdbcUrl=jdbc:mysql://localhost:3306/mydbuser=rootpassword=minPoolSize=5maxPoolSize=20initialPoolSize=5

 

beans.xml

 

 

1.做两个接口IInfoDao和IWorkDao

package maya.dao;public interface IInfoDao {    public void delete(String code);}
package maya.dao;public interface IWorkDao {    public void deleteByInfoCode(String code);}

2.做两个类继承以上两个接口:InfoDao和WorkDao

package maya.daolmpl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Repository;import maya.dao.IInfoDao;@Repositorypublic class InfoDao implements IInfoDao {      @Autowired//自动装配beans.xml中的jdbcTemplate    private JdbcTemplate jdbcTemplate;      @Override    public void delete(String code) {                String sql = "delete from info where code=?";        jdbcTemplate.update(sql,code);        //故意写一个错误代码        int n = 5/0;    }}
package maya.daolmpl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Repository;import maya.dao.IWorkDao;@Repositorypublic class WorkDao implements IWorkDao {    @Autowired    private JdbcTemplate jdbcTemplate;    @Override    public void deleteByInfoCode(String code) {        String sql = "delete from work where infoCode=?";        jdbcTemplate.update(sql,code);            }}

3.向xml文件 添加配置信息

4.建立业务接口并用类继承

IInfoService接口

package maya.service;public interface IInfoService {    public void delete(String code);}

InfoService类

package maya.servicelmpl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Propagation;import org.springframework.transaction.annotation.Transactional;import maya.dao.IInfoDao;import maya.dao.IWorkDao;import maya.daolmpl.WorkDao;import maya.service.IInfoService;@Servicepublic class InfoService implements IInfoService {    @Autowired    private IWorkDao workDao;    @Autowired    private IInfoDao infoDao;        @Transactional//为以下方法添加事务注解        @Override    public void delete(String code) {        workDao.deleteByInfoCode(code);        infoDao.delete(code);            }}

5.创建测试类并运行

package maya.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import maya.dao.IInfoDao;import maya.dao.IWorkDao;import maya.service.IInfoService;public class Test {    private static ApplicationContext context = null;    private static IInfoDao infoDao = null;    private static IWorkDao workDao = null;    private static IInfoService infoService = null;    static {        context = new ClassPathXmlApplicationContext("beans.xml");        infoDao = (IInfoDao)context.getBean("infoDao");        workDao = (IWorkDao)context.getBean("workDao");        infoService = (IInfoService)context.getBean("infoService");            }            public static void main(String[] args) {        infoService.delete("a004");    }}

结果(报错,由于除数为0):

Exception in thread "main" java.lang.ArithmeticException: / by zero

查看数据库表,并未删除成功

 

把事务取消掉,比如删除事务注解

package maya.servicelmpl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Propagation;import org.springframework.transaction.annotation.Transactional;import maya.dao.IInfoDao;import maya.dao.IWorkDao;import maya.daolmpl.WorkDao;import maya.service.IInfoService;@Servicepublic class InfoService implements IInfoService {    @Autowired    private IWorkDao workDao;    @Autowired    private IInfoDao infoDao;        //@Transactional,事务注解注销掉    @Override    public void delete(String code) {        workDao.deleteByInfoCode(code);        infoDao.delete(code);            }}

再次运行查看结果:依然报错

Exception in thread "main" java.lang.ArithmeticException: / by zero

查看数据库,“a004”已被删除

 

转载于:https://www.cnblogs.com/jonsnow/p/6652810.html

你可能感兴趣的文章
VS2012 创建项目失败,,提示为找到约束。。。。
查看>>
设计类图
查看>>
类对象
查看>>
[Voice communications] 声音的滤波
查看>>
软件建模——第9章 毕业论文管理系统—面向对象方法
查看>>
[SDOI2008]洞穴勘测
查看>>
Difference between Linearizability and Serializability
查看>>
IDEA使用操作文档
查看>>
UIView
查看>>
添加日期选择控件
查看>>
bzoj4765: 普通计算姬 (分块 && BIT)
查看>>
看完漫画秒懂区块链
查看>>
Oracle命令类别
查看>>
stc12c5a60s2驱动TEA5767收音机模块硬件调试总结
查看>>
vue中提示$index is not defined
查看>>
css选择器
查看>>
ASP.NET上传下载文件
查看>>
Galaxy Nexus 全屏显示-隐藏Navigation Bar
查看>>
Spring中使用Velocity模板
查看>>
上周热点回顾(8.18-8.24)
查看>>