JdbcTemplate primavera y el administrador de transacciones

estructura interna del grano objeto:

@Autowired 
privada IAccountService AccountService;

 
@Service ( "AccountService") 
@Transactional (propagación = Propagation.SUPPORTS, readOnly = true) //只读型事务的配置
implementos AccountServiceImpl public class {IAccountService

@Autowired
IAccountDao accountDao privado;


@Repository ( "") accountDao 
clase pública implementa AccountDaoImpl IAccountDao {

@Autowired
privada JdbcTemplate JdbcTemplate;
 

Hay documentos en bean.xml
<- -配置primavera创建容器时要扫描的包!> 
<Context: componente de exploración de bases paquete = "com.itheima"> </ contexto: componente de exploración>

<! -配置JdbcTemplate ->
< bean id = clase "JdbcTemplate" = "org.springframework.jdbc.core.JdbcTemplate">
<property name = "dataSource" ref = "origen de datos"> </ property>
</ bean>



<! -配置数据源- >
<bean id = clase "origen de datos" => "org.springframework.jdbc.datasource.DriverManagerDataSource"
<propiedad nombre = valor "driverClassName" = "com.mysql.jdbc.Driver"> </ property>
<property name =" url" value = "jdbc: mysql: // localhost: 3306 / eesy"> </ property>
<name = valor de la propiedad "nombre de usuario" => </ propiedad> "raíz"
<nombre = valor de la propiedad "contraseña" => </ propiedad> "1234"
</ bean>

<! - control de transacciones declarativa basada en anotación en primavera pasos de configuración
1, configure el administrador de transacciones
2, soporte de resorte abierto para asuntos de anotación
3, las necesidades locales de apoyo transacción anotación @Transactional


->
<! - Configurar el gestor de transacciones ->
<bean lo anterior mencionado ID = clase "transactionManager" = "org.springframework.jdbc.datasource.DataSourceTransactionManager">
<Property name = "dataSource" ref = "origen de datos"> </ propiedad>
</ bean>



<- soporte de resorte abierto para asuntos de anotación ->
<tx: anotación impulsada transacción-manager = " transactionManager"> </ tx: anotación impulsada>

 

Persistencia clase de implementación de la capa

 

@Override
public Account findAccountByName(String accountName) {
List<Account> accounts = jdbcTemplate.query("select * from account where name = ?",new BeanPropertyRowMapper<Account>(Account.class),accountName);
if(accounts.isEmpty()){
return null;
}
if(accounts.size()>1){
throw new RuntimeException("结果集不唯一");
}
return accounts.get(0);
}

业务层实现类
//需要的是读写型事务配置
@Transactional(propagation= Propagation.REQUIRED,readOnly=false)//可以读写
@Override
public void transfer(String sourceName, String targetName, Float money) {
System.out.println("transfer....");
//2.1根据名称查询转出账户
Account source = accountDao.findAccountByName(sourceName);
//2.2根据名称查询转入账户
Account target = accountDao.findAccountByName(targetName);
//2.3转出账户减钱
source.setMoney(source.getMoney()-money);
//2.4转入账户加钱
target.setMoney(target.getMoney()+money);
//2.5更新转出账户
accountDao.updateAccount(source);

int i=1/0;//异常源 byzero

//2.6更新转入账户
accountDao.updateAccount(target);
}

junit单元测试
@Test
public void testTransfer(){

accountService.transfer("aaa","bbb",100f);

}





 

Supongo que te gusta

Origin www.cnblogs.com/yitaqiotouto/p/12607810.html
Recomendado
Clasificación