springJDBC + 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;
	}
}

你可能感兴趣的:(spring 事务)