(笔记)Spring实战_事务管理(3)_在Spring中的编码事务
来源:互联网 发布:网络映射如何做 编辑:程序博客网 时间:2024/05/01 17:09
spring-spitter.xml
<?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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" /> <property name="username" value="spring" /> <property name="password" value="spring" /> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate"> <constructor-arg ref="dataSource" /> </bean> <bean id="spitterDao" class="com.springinaction.spitter.transaction.code.JdbcSpitterDAO"> <property name="jdbcTemplate" ref="jdbcTemplate" /> </bean> <bean id="spitterService" class="com.springinaction.spitter.transaction.code.SpitterServiceImpl"> <property name="spitterDao" ref="spitterDao" /> <property name="transactionTemplate"> <bean class="org.springframework.transaction.support.TransactionTemplate"> <property name="transactionManager" ref="transactionManager" /> </bean> </property> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean></beans>
JdbcSpitterDAO.java
package com.springinaction.spitter.transaction.code;import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;public class JdbcSpitterDAO implements SpitterDAO{ private SimpleJdbcTemplate jdbcTemplate; public void setJdbcTemplate(SimpleJdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public void addSpitter(Spitter spitter) { jdbcTemplate.update( "INSERT INTO SPITTER(ID,USERNAME,PASSWORD,FULLNAME,EMAIL) VALUES(?,?,?,?,?)", spitter.getId(), spitter.getUsername(), spitter.getPassword(), spitter.getFullname(), spitter.getEmail()); }}
SpitterServiceImpl.java
package com.springinaction.spitter.transaction.code;import org.springframework.transaction.TransactionStatus;import org.springframework.transaction.support.TransactionCallback;import org.springframework.transaction.support.TransactionTemplate;public class SpitterServiceImpl implements SpitterService{ private SpitterDAO spitterDao; private TransactionTemplate transactionTemplate; public void setSpitterDao(SpitterDAO spitterDao) { this.spitterDao = spitterDao; } public void setTransactionTemplate(TransactionTemplate transactionTemplate) { this.transactionTemplate = transactionTemplate; } public void saveSpitter(final Spitter spitter) { transactionTemplate.execute(new TransactionCallback<Void>() { public Void doInTransaction(TransactionStatus txStatus) { try { spitterDao.addSpitter(spitter); } catch (RuntimeException e) { txStatus.setRollbackOnly(); throw e; } return null; } }); }}
Spitter.java
package com.springinaction.spitter.transaction.code;public class Spitter{ private int id; private String username; private String password; private String fullname; private String email; /** * @return Returns the id. */ public int getId() { return id; } /** * @param id * The id to set. */ public void setId(int id) { this.id = id; } /** * @return Returns the username. */ public String getUsername() { return username; } /** * @param username * The username to set. */ public void setUsername(String username) { this.username = username; } /** * @return Returns the password. */ public String getPassword() { return password; } /** * @param password * The password to set. */ public void setPassword(String password) { this.password = password; } /** * @return Returns the fullname. */ public String getFullname() { return fullname; } /** * @param fullname * The fullname to set. */ public void setFullname(String fullname) { this.fullname = fullname; } /** * @return Returns the email. */ public String getEmail() { return email; } /** * @param email * The email to set. */ public void setEmail(String email) { this.email = email; } @Override public String toString() { return "Spitter [id=" + id + ", username=" + username + ", password=" + password + ", fullname=" + fullname + ", email=" + email + "]"; }}
Test Demo
@Test public void test1() { ApplicationContext ctx = new ClassPathXmlApplicationContext( "com/springinaction/spitter/transaction/code/spring-spitter.xml"); SpitterService service = (SpitterService)ctx.getBean("spitterService"); Spitter spitter = new Spitter(); spitter.setId(19); spitter.setUsername("Jagger"); spitter.setPassword("123456"); spitter.setFullname("Jagger S Y CHEN"); spitter.setEmail("43970615@XX.com"); service.saveSpitter(spitter); }
如果你想完全控制事务的边界,编码式事务是很好的。但是,你从程序清单可以看出它是侵入性的。你必须修改saveSpitter()实现来得到Spring的编程式事务的支持。
0 0
- (笔记)Spring实战_事务管理(3)_在Spring中的编码事务
- (笔记)Spring实战_事务管理(1)_理解事务
- (笔记)Spring实战_事务管理(2)_选择事务管理器
- (笔记)Spring实战_事务管理(4)_声明式事务
- (笔记)Spring实战_征服数据库(3)_在Spring中使用JDBC
- (笔记)Spring实战_征服数据库(4)_在Spring中集成Hibernate
- (笔记)Spring实战_面向切面的Spring(3)_在XML中声明切面
- (笔记)Spring实战_最小化Spring XML配置(3)_自动检测Bean
- (笔记)Spring实战_装配Bean(3)_使用表达式装配
- (笔记)Spring实战_最小化Spring XML配置(1)_自动装配Bean属性
- (笔记)Spring实战_最小化Spring XML配置(2)_使用注解装配
- (笔记)Spring实战_面向切面的Spring(1)_什么是面向切面编程
- (笔记)Spring实战_面向切面的Spring(4)_注解切面
- Spring事务管理(二)Spring中的事务管控
- (笔记)Spring实战_最小化Spring XML配置(4)_使用Spring基于Java的配置
- (笔记)Spring实战_装配Bean(1)_声明Bean
- (笔记)Spring实战_装配Bean(2)_注入Bean属性
- (笔记)Spring实战_征服数据库(2)_配置数据源
- 串行12864显示
- AJAJ滚动加载
- Linux内核代码删减
- MySql 学习笔记二:索引
- 水仙花数
- (笔记)Spring实战_事务管理(3)_在Spring中的编码事务
- JQ如何获取原生的event对象
- DFS与BFS
- PAT 1015. Reversible Primes
- 高斯混合模型背景建模(BackgroundSubtractorMOG2)在opencv3.0与opencv2.4中的使用方法区别
- Linux终极shell-Z Shell--用强大的zsh & oh-my-zsh把Bash换掉
- android沉浸式应用(模式)
- 学习日志第6篇
- http 协议 通用信息头 Transfer-Encoding: chunked