`

spring JDBC事务管理

阅读更多

 

一直想学习怎么使用spring 的事务,在网上查了很多资料,还是不知道怎么写,大都是基于注解方式的,要么就是基于hibernate的事务,而且没有完整的例子,都是代码片段,这里我自己写了一个简单的demo,供给大家学习

 

1、建立一个对象(跟数据库中的表对应)

 

Java代码  收藏代码
  1. package hb.bean;  
  2.   
  3. public class Book {  
  4.     private int id;  
  5.     private String name;  
  6.     private String author;  
  7.     private int num;  
  8.   
  9.     public int getNum() {  
  10.         return num;  
  11.     }  
  12.   
  13.     public void setNum(int num) {  
  14.         this.num = num;  
  15.     }  
  16.   
  17.     public int getId() {  
  18.         return id;  
  19.     }  
  20.   
  21.     public void setId(int id) {  
  22.         this.id = id;  
  23.     }  
  24.   
  25.     public String getName() {  
  26.         return name;  
  27.     }  
  28.   
  29.     public void setName(String name) {  
  30.         this.name = name;  
  31.     }  
  32.   
  33.     public String getAuthor() {  
  34.         return author;  
  35.     }  
  36.   
  37.     public void setAuthor(String author) {  
  38.         this.author = author;  
  39.     }  
  40. }  

 

 2、建立一个接口(实现对表的相关操作)

 

Java代码  收藏代码
  1. package hb.dao;  
  2.   
  3. import hb.bean.Book;  
  4. import java.util.List;  
  5. import org.springframework.transaction.annotation.Transactional;  
  6.   
  7. @Transactional  
  8. public interface BookDAO {  
  9.       
  10.     //查看book表中的所有数据  
  11.     public List listBook();  
  12.       
  13.     //向book表中插入一条数据  
  14.     public void insertBook(Book book);  
  15. }  

 

 3、实现接口的操作

 

Java代码  收藏代码
  1. package hb.dao.imp;  
  2.   
  3. import hb.bean.Book;  
  4. import hb.dao.BookDAO;  
  5. import hb.row.UserRowMapper;  
  6.   
  7. import java.sql.ResultSet;  
  8. import java.sql.SQLException;  
  9. import java.util.List;  
  10.   
  11. import org.springframework.jdbc.core.JdbcTemplate;  
  12. import org.springframework.jdbc.core.RowMapper;  
  13. import org.springframework.jdbc.core.support.JdbcDaoSupport;  
  14. import org.springframework.jdbc.datasource.DataSourceTransactionManager;  
  15. import org.springframework.transaction.TransactionStatus;  
  16. import org.springframework.transaction.annotation.Transactional;  
  17. import org.springframework.transaction.support.TransactionCallbackWithoutResult;  
  18. import org.springframework.transaction.support.TransactionTemplate;  
  19.   
  20. import sun.jdbc.odbc.ee.DataSource;  
  21.   
  22. @Transactional  
  23. public class BookDAOImpl extends JdbcDaoSupport implements BookDAO {  
  24.       
  25.     public DataSourceTransactionManager transactionManager;  
  26.   
  27.     public void setTransactionManager(DataSourceTransactionManager transactionManager) {  
  28.         this.transactionManager = transactionManager;  
  29.     }  
  30.   
  31.     @SuppressWarnings("unchecked")  
  32.     public List listBook() {  
  33.         String sql = "select * from book";  
  34.         //JdbcDaoSupport里面有jdbcTemplate这个对象的set方法.JdbcTemplate这个类需要配置数据源  
  35.         List list = this.getJdbcTemplate().query(sql, new UserRowMapper());  
  36.         return list;  
  37.     }  
  38.   
  39.     public void insertBook(final Book book) {  
  40.         final String sql = "insert into book(id,name,author,num)values(?,?,?,?)";  
  41.         TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);  
  42.         final JdbcTemplate jdbcTemplate = this.getJdbcTemplate();  
  43.         transactionTemplate.execute(new TransactionCallbackWithoutResult(){  
  44.             @Override  
  45.             protected void doInTransactionWithoutResult(TransactionStatus arg0) {  
  46.                 Object[] params = new Object[] {book.getId(), book.getName(), book.getAuthor(),book.getNum() };  
  47.                 //下面的语句是用来测试事务异常的情况  
  48. //                new Integer("huangbiao");  
  49.                 jdbcTemplate.update(sql, params);  
  50.             }  
  51.         });  
  52.           
  53.     }  
  54.   
  55. }  

 

 4、继承RowMapper 接口接受返回过来的结果集

 

Java代码  收藏代码
  1. package hb.row;  
  2.   
  3. import hb.bean.Book;  
  4.   
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7.   
  8. import org.springframework.jdbc.core.RowMapper;  
  9.   
  10. public class UserRowMapper implements RowMapper {  
  11.   
  12.     public Object mapRow(ResultSet rs,int index) throws SQLException {  
  13.         Book book = new Book();  
  14.         System.out.println(rs.getString("name"));  
  15.         book.setName(rs.getString("name"));  
  16.         return book;  
  17.     }  
  18. }  

 

5、相关的配置信息

 

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xmlns:context="http://www.springframework.org/schema/context"  
  5.        xmlns:tx="http://www.springframework.org/schema/tx"  
  6.        xsi:schemaLocation="http://www.springframework.org/schema/beans  
  7.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
  8.            http://www.springframework.org/schema/context  
  9.            http://www.springframework.org/schema/context/spring-context2.5.xsd  
  10.            http://www.springframework.org/schema/tx   
  11.            http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">  
  12.           
  13.         <!--  配置数据源   -->  
  14.         <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
  15.           <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>  
  16.           <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl" />  
  17.           <property name="username" value="huangbiao"/>  
  18.           <property name="password" value="huangbiao"/>  
  19.             
  20.           <!-- 连接池启动时的初始值   -->  
  21.           <property name="initialSize" value="1" />  
  22.           <!-- 连接池的最大值  -->  
  23.           <property name="maxActive" value="500"/>  
  24.           <!-- 最大空闲值,当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接释放,一直减少到msxIdle为止  -->  
  25.           <property name="maxIdle" value="2" />  
  26.           <!-- 最小空闲值,当空闲的连接数小于阀值时,连接池就会预申请一些连接,以免洪峰到来时来不及申请  -->  
  27.           <property name="minIdle" value="1" />  
  28.         </bean>  
  29.     
  30.         <!-- 配置事务管理器 -->  
  31.         <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  32.           <property name="dataSource" ref="dataSource"/>  
  33.         </bean>  
  34.           
  35.         <!-- 采用@Transactional注解方式使用事务   -->  
  36.         <tx:annotation-driven transaction-manager="txManager"/>  
  37.           
  38.         <bean id="bookDao" class="hb.dao.imp.BookDAOImpl" >  
  39.         <!-- 因为继承了JdbcDaoSupport类,该类需要注入 JdbcTemplate类对象 -->  
  40.             <property name="jdbcTemplate" ref="jdbcTemplate"></property>  
  41.             <property name="transactionManager" ref="transactionManager"></property>  
  42.         </bean>  
  43.           
  44.           
  45.         <!-- jdbcTemplate需要配置dataSource,因为里面有一个set方法,所以注入给它 -->  
  46.         <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">  
  47.             <property name="dataSource" ref="dataSource"></property>  
  48.         </bean>  
  49.           
  50.         <!-- 事务处理类,该类用于管理事务,里面有set方法注入数据源 -->  
  51.         <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  52.             <property name="dataSource" ref="dataSource" />  
  53.         </bean>  
  54.           
  55. </beans>   

 

6、写一个测试类(使用JUnint)

 

Java代码  收藏代码
  1. package hb.test;  
  2.   
  3. import hb.bean.Book;  
  4. import hb.dao.BookDAO;  
  5.   
  6. import java.util.Iterator;  
  7. import java.util.List;  
  8.   
  9.   
  10. import org.junit.BeforeClass;  
  11. import org.junit.Test;  
  12. import org.springframework.context.ApplicationContext;  
  13. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  14. import org.springframework.context.support.FileSystemXmlApplicationContext;  
  15. import org.springframework.jdbc.core.JdbcTemplate;  
  16.   
  17. public class SpringTest {  
  18.   
  19.     private BookDAO bookDao;  
  20.       
  21.     @BeforeClass  
  22.     public static void setUpBeforeClass() throws Exception {  
  23.           
  24.     }  
  25.       
  26.     @SuppressWarnings("unchecked")  
  27.     @Test  
  28.     //执行查询的方式  
  29.     public void doQueryTest(){  
  30.         try{  
  31.             ApplicationContext ctx = new FileSystemXmlApplicationContext("applicationContext.xml");  
  32.             bookDao = (BookDAO) ctx.getBean("bookDao");  
  33.             List list = bookDao.listBook();  
  34.             Iterator iter = list.iterator();  
  35.             while(iter.hasNext()){  
  36.                 Book book = (Book)iter.next();  
  37.                 System.out.println(book.getName());  
  38.             }  
  39.         }  
  40.         catch (Exception e) {  
  41.             e.printStackTrace();  
  42.         }  
  43.     }     
  44.       
  45.     @Test  
  46.     public void doInsertTest(){  
  47.         Book book = new Book();  
  48.         book.setAuthor("huangbiao");  
  49.         book.setId(90);  
  50.         book.setName("hb");  
  51.         book.setNum(44);  
  52.         try{  
  53.             ApplicationContext ctx = new FileSystemXmlApplicationContext("applicationContext.xml");  
  54.             bookDao = (BookDAO) ctx.getBean("bookDao");  
  55.             bookDao.insertBook(book);  
  56.         }  
  57.         catch (Exception e) {  
  58.             e.printStackTrace();  
  59.         }  
  60.           
  61.     }  
  62. }  
分享到:
评论

相关推荐

    实例详解Spring JDBC事务管理.doc

    Spring JDBC事务管理 Spring框架提供了两种事务管理方式:编程式的事务管理(Programmatic transaction management)和声明式的事务管理(Declarative transaction management)。在本文中,我们将以JDBC事务管理...

    spring hibernate,spring jdbc事务管理

    两个项目,一个项目是基于spring jdbc实现的分布式事务,一个是基于spring hibernate的分布式事务,hibernate项目里的applicationContext2.xml是基于mysql和mssql, applicationContext3.xml基于两个mssql, ...

    Spring JDBC与事务管理

    javaEE 实验三 Spring JDBC与事务管理, 一、实验目的 1、掌握Spring JDBC的配置; 2、掌握JdbcTemplae类中增删改查方法的使用; 3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握...

    spring jdbc 事务

    综上,Spring JDBC事务管理是Spring框架中重要的部分,通过理解并掌握其原理和使用方法,可以帮助开发者构建稳定、可靠的数据库应用程序。在实践中,要根据项目的具体需求选择合适的事务管理策略,并注意处理事务...

    Spring事务管理和SpringJDBC思维导图

    本话题主要关注Spring的两个重要模块:事务管理和Spring JDBC。这些知识点对于任何使用Spring进行后端开发的程序员来说都是至关重要的。 首先,我们来深入理解Spring事务管理。事务是数据库操作的基本单元,它确保...

    JavaEE的Spring JDBC与事务管理 实验

    3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握基于XML和Annotation的声明式事务管理的使用。 二、 实验内容 1、在MySQL中创建以下三张表,其中account为账户表,book为书籍信息...

    spring-jdbc-dao

    四、Spring JDBC事务管理 1. 编程式事务管理:通过PlatformTransactionManager接口的begin(), commit()和rollback()方法手动控制事务。 2. 声明式事务管理:利用@Transactional注解在方法级别声明事务,Spring会自动...

    基于Spring JDBC的事务管理

    基于Spring JDBC的事务管理 本资源主要介绍基于Spring JDBC的事务管理,包括事务的定义、使用 @Transactional 注解、Spring JDBC的事务管理机制、事务的ACID特性、事务的传播、事务的隔离等内容。 事务的定义 ...

    spring_JDBC整合包

    在分布式环境下,Spring JDBC配合Spring的事务管理功能,可以实现跨数据库操作的事务一致性。 这个"spring_JDBC基本包"可能包含的文件有Spring框架的基础库,如spring-jdbc.jar,数据库驱动如mysql-connector-java....

    Spring JDBC与事务管理源代码

    1、掌握Spring JDBC的配置; 2、掌握JdbcTemplae类中增删改查方法的使用;...3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握基于XML和Annotation的声明式事务管理的使用。

    Spring JDBC常用Jar包

    例如,通过Spring JDBC,你可以利用JdbcTemplate执行SQL查询、更新、插入和删除操作,同时利用Spring的事务管理能力来确保数据的一致性。此外,通过依赖注入,你可以将DataSource配置在外部,使得数据库配置的改变...

    spring jdbc.zip

    Spring JDBC不仅包含了JDBC的基本功能,如数据源配置、事务管理,还引入了模板模式,即JdbcTemplate,进一步降低了数据库操作的复杂性。 JdbcTemplate是Spring JDBC的核心类,它是对JDBC的简单而强大的封装。它提供...

    SpringJDBC注解事务.zip

    本篇文章将深入探讨Spring JDBC如何通过注解来实现事务管理。 1. **Spring JDBC简介** Spring JDBC提供了一个JdbcTemplate类,它封装了常见的JDBC操作,如执行SQL查询、更新、调用存储过程等,减少了代码量和出错...

    SpringJDBC.rar_SpringJDBC_spring jdbc

    通过这个SpringJDBC.rar的案例,初学者可以学习到如何配置DataSource,如何创建JdbcTemplate实例,以及如何编写和执行SQL语句。同时,实践中还可以了解到如何将Spring JDBC整合到Spring Boot项目中,以及如何处理...

    spring-jdbc jar包.rar

    4. **JdbcTransactionManager**:Spring JDBC提供了事务管理功能,JdbcTransactionManager是基于JDBC的事务管理器,它负责控制数据库事务的开始、提交、回滚等操作。 5. **DataSourceUtils** 和 **ConnectionUtils*...

    Spring Jdbc的jar包

    在Spring JDBC中,事务管理是至关重要的,因为它确保了数据库操作的一致性和完整性。`PlatformTransactionManager`是Spring中处理事务的核心接口,而`DataSourceTransactionManager`是实现该接口的具体类,用于基于...

    springjdbc.zip_SpringJDBC_spring jdbc_spring 增删改查_springjdbc xml

    综上所述,`springjdbc.zip`文件中的示例可能展示了如何在Spring环境中配置和使用JDBC,包括数据源配置、事务管理、以及使用`JdbcTemplate`执行增删改查操作的完整流程。通过学习这些示例,开发者可以更好地理解和...

    spring jdbc示例代码

    3. **Transaction Management**:Spring JDBC支持声明式事务管理,这意味着我们可以在XML配置文件中定义事务边界,而不是在代码中显式地控制事务的开始、提交和回滚。 4. **PreparedStatement**:Spring JDBC鼓励...

    spring jdbc相关包版本5.1.3

    6. **spring-tx-5.1.3.RELEASE.jar**:处理事务管理,包括编程式和声明式事务管理,与Spring JDBC紧密配合,确保数据一致性。 7. **mysql-connector-java-8.0.11.jar**:这是MySQL数据库的驱动包,用于建立Java应用...

Global site tag (gtag.js) - Google Analytics