资讯专栏INFORMATION COLUMN

spring连接jdbc-事务

liaosilzu2007 / 1367人阅读

摘要:新建项目,名为导入包导入了中的所有包和另外两个包使用作为持久方案仅仅是得到连接定义的定义的配置事务管理器对这个方法实现事务事务控制位置方法中含有的三个方法。测试类用于测试的函数应该引入的包

1、新建项目,名为transactionExample
2、导入jar包
导入了spring中的所有jar包和另外两个jar包:

3、applicationContext.xml



     



      
      
      
     



        



    




    
        
    





    




    
        
    



  
      
      
 


4、JdbcTemplateService.java
service方法中含有save、update的delete三个方法。在save方法之后,程序出错,所以事务会回滚,之前的save操作会失效,不会保存到数据库中。

public class JdbcTemplateService {
    
    private JdbcTemplateDao jdbcTemplateDao; 
    
    public void domain(){
        jdbcTemplateDao.save();
        int i = 2/0;//这里出错了,事务会回滚,之前的save无效
        jdbcTemplateDao.update();
        jdbcTemplateDao.delete();
    }

    public JdbcTemplateDao getJdbcTemplateDao() {
        return jdbcTemplateDao;
    }

    public void setJdbcTemplateDao(JdbcTemplateDao jdbcTemplateDao) {
        this.jdbcTemplateDao = jdbcTemplateDao;
    }
}

5.JdbcTemplateDao.java
在这里需要注意的是,jdbc默认是一个语句一个事务,所以,当要实现spring配置的事务的时候,需要加上conn.setAutoCommit(false);否则回滚操作会失效。

public class JdbcTemplateDao extends JdbcDaoSupport{
    
    private PreparedStatement pre = null;
    private Connection conn;
    
    //异常向上层抛出
    public void save() {
        String insertSql = "insert into user values(?,?)";
        try {
            conn = getDataSource().getConnection();
            conn.setAutoCommit(false);
            pre = conn.prepareStatement(insertSql);
            pre.setString(1, "hahaha");
            pre.setString(2, "happy");
            pre.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    public void delete(){
        ...
    }
    public void update(){
        ...
    }
}

6、JdbcDaoSupport.java
本来JdbcDaoSupport 这个类应该是本来就存在的,但是当我在JdbcTemplateDao.java中继承了JdbcDaoSupport.java这个类之后,得到的DataSource总是为空,所以我另写了一个JdbcDaoSupport.java,里面有set和get方法,这样就能正确地得到DataSource的值。

public class JdbcDaoSupport {
    
    private DriverManagerDataSource driverManagerDataSource;

    public DriverManagerDataSource getDataSource() {
        return driverManagerDataSource;
    }

    public void setDataSource(DriverManagerDataSource driverManagerDataSource) {
        this.driverManagerDataSource = driverManagerDataSource;
    }
}

7、测试类

/**
 * 用于测试的main函数
 * @author Administrator
 *
 */
public class test {

    /**
     * @param args
     * @throws SQLException 
     * @throws SQLException 
     */
    public static void main(String[] args){
        String[] configLocations = new String[] {"applicationContext.xml"};
        //应该引入spring的jar包
        ApplicationContext ctx = new ClassPathXmlApplicationContext(configLocations);
        JdbcTemplateService j = ctx.getBean(JdbcTemplateService.class);
        j.domain();
    }

}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65894.html

相关文章

  • Spring笔记04_AOP注解开发_模板_事务

    摘要:后置增强周杰伦环绕通知在切面类中添加以下方法环绕通知环绕前增强环绕前增强测试前置增强保存订单。。。不使用事务管理。 1. Spring基于AspectJ的注解的AOP开发 1. 1 SpringAOP的注解入门 创建项目,导入jar包 需要导入Spring基础包4+2 需要导入AOP联盟包、AspectJ包、Spring整合Aspect包Spring-aop包 Spring整合单...

    youkede 评论0 收藏0
  • Spring【DAO模块】就是这么简单

    摘要:连接对象执行命令对象执行关闭值得注意的是,对数据库连接池是有很好的支持的。给我们提供了事务的管理器类,事务管理器类又分为两种,因为的事务和的事务是不一样的。 前言 上一篇Spring博文主要讲解了如何使用Spring来实现AOP编程,本博文主要讲解Spring的DAO模块对JDBC的支持,以及Spring对事务的控制... 对于JDBC而言,我们肯定不会陌生,我们在初学的时候肯定写过非...

    NSFish 评论0 收藏0
  • 由for update引发的血案

    摘要:微信公众号后端进阶,专注后端技术分享框架分布式中间件服务治理等等。 微信公众号「后端进阶」,专注后端技术分享:Java、Golang、WEB框架、分布式中间件、服务治理等等。 老司机倾囊相授,带你一路进阶,来不及解释了快上车! 公司的某些业务用到了数据库的悲观锁 for update,但有些同事没有把 for update 放在 Spring 事务中执行,在并发场景下发生了严重的线程阻...

    roundstones 评论0 收藏0
  • spring 入门 3 整合JDBC和AOP事务

    摘要:整合提供了很多模板整合技术持久化技术模板类中提供了一个可以操作数据库的对象对象封装了技术模板对象与中的非常相似准备连接池创建模板对象书写并执行步骤导包基础包类库新增连接池驱动包包事务包准备数据库本地数据库和表书写使用模板实现增删改查 spring整合JDBC spring提供了很多模板整合Dao技术 ORM持久化技术 模板类 JDBC o...

    CHENGKANG 评论0 收藏0

发表评论

0条评论

liaosilzu2007

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<