当前位置:首页 > 开发 > 编程语言 > Spring > 正文

springJDBC + spring 事务属性

发表于: 2014-11-01   作者:annan211   来源:转载   浏览次数:
摘要:   spring 事务传播属性 百分之八十用到的都是 required ,并且这个事被默认使用的。 其含义为 业务方法需要在一个事务中运行,如果方法运行时,已经处在一个事务中,那么加入该事务,否则为自己创建一个新的事务。   该事务为spring默认属性,通常情况下不需要显示标记。     这里使用注解模式 简单解析一下,不做深入探讨。  

  spring 事务传播属性 百分之八十用到的都是 required ,并且这个事被默认使用的。
其含义为 业务方法需要在一个事务中运行,如果方法运行时,已经处在一个事务中,那么加入该事务,否则为自己创建一个新的事务。
  该事务为spring默认属性,通常情况下不需要显示标记。
 
  这里使用注解模式 简单解析一下,不做深入探讨。
 
1  注册事务管理器  交给spring容器管理。


<bean id="txManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  	   <property name="dataSource" ref="dataSource"/>
    </bean>
  <!--使用注解@Transactional注解方式-->
  <tx:annotation-driven transaction-manager="txManager"/>



  2 使用注解 管理事务


 
    spring 事务回滚与否需要配置,默认情况下,方法在遇到运行期例外(unchecked)的情况下是会自动进行事务回滚的,除非在方法注解 注明:@Transactional(noRollbackFor=RunntimeException.class)

如果遇到的是 checked例外(显示抛出异常,或者 try chach语句块) 默认是不会进行回滚的 ,除非在 方法注解注明 @Transactional(rollbackFor=Exception.class)

有些方法是不需要开启事务支持的,比如 获取对象,事务的开启和关闭会浪费资源,这样我们可以通过 注解注明 不开启事务。
  @Transactional(propagation=Propagation.NOT_SUPPORT)



@Transactional
public class PersonServiceBean implements PersonService {
	private JdbcTemplate jdbcTemplate;
	
        // 这里使用set注入
	public void setDataSource(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);
	}

	public void delete(Integer personid) {
		jdbcTemplate.update("delete from person where id=?", new Object[]{personid},
				new int[]{java.sql.Types.INTEGER});
	}

	public Person getPerson(Integer personid) {		
		return (Person)jdbcTemplate.queryForObject("select * from person where id=?", new Object[]{personid}, 
				new int[]{java.sql.Types.INTEGER}, new PersonRowMapper());
	}

	@SuppressWarnings("unchecked")
	public List<Person> getPersons() {
		return (List<Person>)jdbcTemplate.query("select * from person", new PersonRowMapper());
	}

	public void save(Person person) {
		jdbcTemplate.update("insert into person(name) values(?)", new Object[]{person.getName()},
				new int[]{java.sql.Types.VARCHAR});
	}

	public void update(Person person) {
		jdbcTemplate.update("update person set name=? where id=?", new Object[]{person.getName(), person.getId()},
				new int[]{java.sql.Types.VARCHAR, java.sql.Types.INTEGER});
	}
}


回调函数
public class PersonRowMapper implements RowMapper {

	public Object mapRow(ResultSet rs, int index) throws SQLException {
		Person person = new Person(rs.getString("name"));
		person.setId(rs.getInt("id"));
		return person;
	}
}

springJDBC + spring 事务属性

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
众所周知的ACID属性: 原子性(atomicity)、一致性(consistency)、隔离性(isolation)以及持久
Spring事务属性包括:传播性、隔离级别、回滚事务属性、超时和只读属性。 事务传播属性 当事务方法
Spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务
Spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务
Spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务
Spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务
Spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务
在经典的 JDBC 用法中,SQL 参数是用占位符 ? 表示,并且受到位置的限制。定位参数的问题在于, 一
自从有了并发,原有的程序哪儿哪儿都不好了——小白语录。 并发事务所导致的问题: 当同一个应用程
spring只是控制数据库的事务提交和回滚,借助于java的反射机制,在事务控制的方法(通常是service层
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号