【整理】JDBC事务管理编程实现

本文详细介绍了Spring框架中两种主要的事务管理方式:PlatformTransactionManager和TransactionTemplate的具体使用方法,包括如何配置事务传播行为、创建事务状态及提交或回滚事务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.PlatformTransactionManager

具体用法如下:(1)实例化需要数据源作参数

                            (2)建立事物的定义,使用DefaultTransactionDefinition类,直接New个新的就可以了

                            (3)调用DefaultTransactionDefinition类的setPropagationBehavior方法,参数是TransactionDefinition的常量,例如PROPAGATION_REQUIRED等。

                            (4)使用具体的SQL操作之前,创建一个TransactionStatus类的实例,def是DefaultTransactionDefinition的实例。

                            (5)正常操作的话,就使用transactionManager.commit(status)。

代码示例:

    JdbcTemplate template = new JdbcTemplate(datasource);

    DataSourceTransactionManager tran = new DataSourceTransactionDefinition();

    DefaultTransactionDefinition def = new DefaultTransactionDefinition();

    def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

    TransactionStatus status = tran.getTransaction(def);

    try{

        template.update("insert into userinfo(username,password) values('aaaa','bbbb')");

        template.update("insert into userinfo(username,password) values('cccc','ddd')");

        tran.commit(status);

    }catch(Exception ex){ tran.rollback(status)};


2.TransactionTemplate

具体用法如下:(1)具体的SQL语句操作时,实例化它,TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);

                         (2)然后具体的SQL操作,transactionTemplate.execute(new TransactionCallback(){

                                  public Object doInTransaction(TransactionStatus status){ //这里执行SQL操作}  

                            })    

                         (3)如果没有返回值,可以使用TransactionCallbackWithoutResult 类。

代码示例:

    final JdbcTemplate template = new JdbcTemplate(datasource);

    DataSourceTransactionManager tran = new DataSourceTransactionManager(datasource);

    TransactionTemplate trantemplate = new TransactionTemplate(tran);

    trantemplate.execute(new TransactionCallback(){

    public Object doInTransaction(TransactionStatus status){

    int i = 0;

    try{

        template.update("insert into userinfo(username, password) values('jjj','kkk')");

        template.update("insert into userinfo(username, password) values('llll','mmm')");

        i = 1;

    }catch(Exception ex){

        ex.printStackTrace();

       status.setRollbackOnly();

       i=0;

    }

    return new Integer(i);

    }

})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值