一直想学习怎么使用spring 的事务,在网上查了很多资料,还是不知道怎么写,大都是基于注解方式的,要么就是基于hibernate的事务,而且没有完整的例子,都是代码片段,这里我自己写了一个简单的demo,供给大家学习
1、建立一个对象(跟数据库中的表对应)
- package hb.bean;
- public class Book {
- private int id;
- private String name;
- private String author;
- private int num;
- public int getNum() {
- return num;
- }
- public void setNum(int num) {
- this.num = num;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getAuthor() {
- return author;
- }
- public void setAuthor(String author) {
- this.author = author;
- }
- }
2、建立一个接口(实现对表的相关操作)
- package hb.dao;
- import hb.bean.Book;
- import java.util.List;
- import org.springframework.transaction.annotation.Transactional;
- @Transactional
- public interface BookDAO {
- //查看book表中的所有数据
- public List listBook();
- //向book表中插入一条数据
- public void insertBook(Book book);
- }
3、实现接口的操作
- package hb.dao.imp;
- import hb.bean.Book;
- import hb.dao.BookDAO;
- import hb.row.UserRowMapper;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.List;
- import org.springframework.jdbc.core.JdbcTemplate;
- import org.springframework.jdbc.core.RowMapper;
- import org.springframework.jdbc.core.support.JdbcDaoSupport;
- import org.springframework.jdbc.datasource.DataSourceTransactionManager;
- import org.springframework.transaction.TransactionStatus;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.transaction.support.TransactionCallbackWithoutResult;
- import org.springframework.transaction.support.TransactionTemplate;
- import sun.jdbc.odbc.ee.DataSource;
- @Transactional
- public class BookDAOImpl extends JdbcDaoSupport implements BookDAO {
- public DataSourceTransactionManager transactionManager;
- public void setTransactionManager(DataSourceTransactionManager transactionManager) {
- this.transactionManager = transactionManager;
- }
- @SuppressWarnings("unchecked")
- public List listBook() {
- String sql = "select * from book";
- //JdbcDaoSupport里面有jdbcTemplate这个对象的set方法.JdbcTemplate这个类需要配置数据源
- List list = this.getJdbcTemplate().query(sql, new UserRowMapper());
- return list;
- }
- public void insertBook(final Book book) {
- final String sql = "insert into book(id,name,author,num)values(?,?,?,?)";
- TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
- final JdbcTemplate jdbcTemplate = this.getJdbcTemplate();
- transactionTemplate.execute(new TransactionCallbackWithoutResult(){
- @Override
- protected void doInTransactionWithoutResult(TransactionStatus arg0) {
- Object[] params = new Object[] {book.getId(), book.getName(), book.getAuthor(),book.getNum() };
- //下面的语句是用来测试事务异常的情况
- // new Integer("huangbiao");
- jdbcTemplate.update(sql, params);
- }
- });
- }
- }
4、继承RowMapper 接口接受返回过来的结果集
- package hb.row;
- import hb.bean.Book;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import org.springframework.jdbc.core.RowMapper;
- public class UserRowMapper implements RowMapper {
- public Object mapRow(ResultSet rs,int index) throws SQLException {
- Book book = new Book();
- System.out.println(rs.getString("name"));
- book.setName(rs.getString("name"));
- return book;
- }
- }
5、相关的配置信息
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context2.5.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
- <!-- 配置数据源 -->
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
- <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl" />
- <property name="username" value="huangbiao"/>
- <property name="password" value="huangbiao"/>
- <!-- 连接池启动时的初始值 -->
- <property name="initialSize" value="1" />
- <!-- 连接池的最大值 -->
- <property name="maxActive" value="500"/>
- <!-- 最大空闲值,当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接释放,一直减少到msxIdle为止 -->
- <property name="maxIdle" value="2" />
- <!-- 最小空闲值,当空闲的连接数小于阀值时,连接池就会预申请一些连接,以免洪峰到来时来不及申请 -->
- <property name="minIdle" value="1" />
- </bean>
- <!-- 配置事务管理器 -->
- <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource"/>
- </bean>
- <!-- 采用@Transactional注解方式使用事务 -->
- <tx:annotation-driven transaction-manager="txManager"/>
- <bean id="bookDao" class="hb.dao.imp.BookDAOImpl" >
- <!-- 因为继承了JdbcDaoSupport类,该类需要注入 JdbcTemplate类对象 -->
- <property name="jdbcTemplate" ref="jdbcTemplate"></property>
- <property name="transactionManager" ref="transactionManager"></property>
- </bean>
- <!-- jdbcTemplate需要配置dataSource,因为里面有一个set方法,所以注入给它 -->
- <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
- <property name="dataSource" ref="dataSource"></property>
- </bean>
- <!-- 事务处理类,该类用于管理事务,里面有set方法注入数据源 -->
- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource" />
- </bean>
- </beans>
6、写一个测试类(使用JUnint)
- package hb.test;
- import hb.bean.Book;
- import hb.dao.BookDAO;
- import java.util.Iterator;
- import java.util.List;
- import org.junit.BeforeClass;
- import org.junit.Test;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import org.springframework.context.support.FileSystemXmlApplicationContext;
- import org.springframework.jdbc.core.JdbcTemplate;
- public class SpringTest {
- private BookDAO bookDao;
- @BeforeClass
- public static void setUpBeforeClass() throws Exception {
- }
- @SuppressWarnings("unchecked")
- @Test
- //执行查询的方式
- public void doQueryTest(){
- try{
- ApplicationContext ctx = new FileSystemXmlApplicationContext("applicationContext.xml");
- bookDao = (BookDAO) ctx.getBean("bookDao");
- List list = bookDao.listBook();
- Iterator iter = list.iterator();
- while(iter.hasNext()){
- Book book = (Book)iter.next();
- System.out.println(book.getName());
- }
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
- @Test
- public void doInsertTest(){
- Book book = new Book();
- book.setAuthor("huangbiao");
- book.setId(90);
- book.setName("hb");
- book.setNum(44);
- try{
- ApplicationContext ctx = new FileSystemXmlApplicationContext("applicationContext.xml");
- bookDao = (BookDAO) ctx.getBean("bookDao");
- bookDao.insertBook(book);
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
相关推荐
Spring JDBC事务管理 Spring框架提供了两种事务管理方式:编程式的事务管理(Programmatic transaction management)和声明式的事务管理(Declarative transaction management)。在本文中,我们将以JDBC事务管理...
两个项目,一个项目是基于spring jdbc实现的分布式事务,一个是基于spring hibernate的分布式事务,hibernate项目里的applicationContext2.xml是基于mysql和mssql, applicationContext3.xml基于两个mssql, ...
javaEE 实验三 Spring JDBC与事务管理, 一、实验目的 1、掌握Spring JDBC的配置; 2、掌握JdbcTemplae类中增删改查方法的使用; 3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握...
综上,Spring JDBC事务管理是Spring框架中重要的部分,通过理解并掌握其原理和使用方法,可以帮助开发者构建稳定、可靠的数据库应用程序。在实践中,要根据项目的具体需求选择合适的事务管理策略,并注意处理事务...
本话题主要关注Spring的两个重要模块:事务管理和Spring JDBC。这些知识点对于任何使用Spring进行后端开发的程序员来说都是至关重要的。 首先,我们来深入理解Spring事务管理。事务是数据库操作的基本单元,它确保...
3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握基于XML和Annotation的声明式事务管理的使用。 二、 实验内容 1、在MySQL中创建以下三张表,其中account为账户表,book为书籍信息...
四、Spring JDBC事务管理 1. 编程式事务管理:通过PlatformTransactionManager接口的begin(), commit()和rollback()方法手动控制事务。 2. 声明式事务管理:利用@Transactional注解在方法级别声明事务,Spring会自动...
基于Spring JDBC的事务管理 本资源主要介绍基于Spring JDBC的事务管理,包括事务的定义、使用 @Transactional 注解、Spring JDBC的事务管理机制、事务的ACID特性、事务的传播、事务的隔离等内容。 事务的定义 ...
在分布式环境下,Spring JDBC配合Spring的事务管理功能,可以实现跨数据库操作的事务一致性。 这个"spring_JDBC基本包"可能包含的文件有Spring框架的基础库,如spring-jdbc.jar,数据库驱动如mysql-connector-java....
1、掌握Spring JDBC的配置; 2、掌握JdbcTemplae类中增删改查方法的使用;...3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握基于XML和Annotation的声明式事务管理的使用。
例如,通过Spring JDBC,你可以利用JdbcTemplate执行SQL查询、更新、插入和删除操作,同时利用Spring的事务管理能力来确保数据的一致性。此外,通过依赖注入,你可以将DataSource配置在外部,使得数据库配置的改变...
Spring JDBC不仅包含了JDBC的基本功能,如数据源配置、事务管理,还引入了模板模式,即JdbcTemplate,进一步降低了数据库操作的复杂性。 JdbcTemplate是Spring JDBC的核心类,它是对JDBC的简单而强大的封装。它提供...
本篇文章将深入探讨Spring JDBC如何通过注解来实现事务管理。 1. **Spring JDBC简介** Spring JDBC提供了一个JdbcTemplate类,它封装了常见的JDBC操作,如执行SQL查询、更新、调用存储过程等,减少了代码量和出错...
通过这个SpringJDBC.rar的案例,初学者可以学习到如何配置DataSource,如何创建JdbcTemplate实例,以及如何编写和执行SQL语句。同时,实践中还可以了解到如何将Spring JDBC整合到Spring Boot项目中,以及如何处理...
4. **JdbcTransactionManager**:Spring JDBC提供了事务管理功能,JdbcTransactionManager是基于JDBC的事务管理器,它负责控制数据库事务的开始、提交、回滚等操作。 5. **DataSourceUtils** 和 **ConnectionUtils*...
在Spring JDBC中,事务管理是至关重要的,因为它确保了数据库操作的一致性和完整性。`PlatformTransactionManager`是Spring中处理事务的核心接口,而`DataSourceTransactionManager`是实现该接口的具体类,用于基于...
综上所述,`springjdbc.zip`文件中的示例可能展示了如何在Spring环境中配置和使用JDBC,包括数据源配置、事务管理、以及使用`JdbcTemplate`执行增删改查操作的完整流程。通过学习这些示例,开发者可以更好地理解和...
3. **Transaction Management**:Spring JDBC支持声明式事务管理,这意味着我们可以在XML配置文件中定义事务边界,而不是在代码中显式地控制事务的开始、提交和回滚。 4. **PreparedStatement**:Spring JDBC鼓励...
6. **spring-tx-5.1.3.RELEASE.jar**:处理事务管理,包括编程式和声明式事务管理,与Spring JDBC紧密配合,确保数据一致性。 7. **mysql-connector-java-8.0.11.jar**:这是MySQL数据库的驱动包,用于建立Java应用...