千家信息网

怎么配置spring基于XML的声明式事务控制

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章主要介绍"怎么配置spring基于XML的声明式事务控制",在日常操作中,相信很多人在怎么配置spring基于XML的声明式事务控制问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
千家信息网最后更新 2024年09月22日怎么配置spring基于XML的声明式事务控制

这篇文章主要介绍"怎么配置spring基于XML的声明式事务控制",在日常操作中,相信很多人在怎么配置spring基于XML的声明式事务控制问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么配置spring基于XML的声明式事务控制"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

                                                                                                                                                                                                                    
/** * 账户的业务层实现类 * * 事务控制应该都是在业务层 */public class AccountServiceImpl implements IAccountService{    private IAccountDao accountDao;    public void setAccountDao(IAccountDao accountDao) {        this.accountDao = accountDao;    }    @Override    public Account findAccountById(Integer accountId) {        return accountDao.findAccountById(accountId);    }    @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;            //2.6更新转入账户            accountDao.updateAccount(target);    }}

spring基于注解的声明式事务控制

---
/** * 账户的业务层实现类 * * 事务控制应该都是在业务层 */@Service("accountService")@Transactional(propagation= Propagation.SUPPORTS,readOnly=true)//只读型事务的配置public class AccountServiceImpl implements IAccountService{    @Autowired    private IAccountDao accountDao;    @Override    public Account findAccountById(Integer accountId) {        return accountDao.findAccountById(accountId);    }    //需要的是读写型事务配置    @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;            //2.6更新转入账户            accountDao.updateAccount(target);    }}

spring基于纯注解的声明式事务控制

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/eesyjdbc.username=rootjdbc.password=1234
/** * 和连接数据库相关的配置类 */public class JdbcConfig {    @Value("${jdbc.driver}")    private String driver;    @Value("${jdbc.url}")    private String url;    @Value("${jdbc.username}")    private String username;    @Value("${jdbc.password}")    private String password;    /**     * 创建JdbcTemplate     * @param dataSource     * @return     */    @Bean(name="jdbcTemplate")    public JdbcTemplate createJdbcTemplate(DataSource dataSource){        return new JdbcTemplate(dataSource);    }    /**     * 创建数据源对象     * @return     */    @Bean(name="dataSource")    public DataSource createDataSource(){        DriverManagerDataSource ds = new DriverManagerDataSource();        ds.setDriverClassName(driver);        ds.setUrl(url);        ds.setUsername(username);        ds.setPassword(password);        return ds;    }}
/** * spring的配置类,相当于bean.xml */@Configuration@ComponentScan("com.itheima")@Import({JdbcConfig.class,TransactionConfig.class})@PropertySource("jdbcConfig.properties")@EnableTransactionManagement//开启事务管理public class SpringConfiguration {}
/** * 和事务相关的配置类 */public class TransactionConfig {    /**     * 用于创建事务管理器对象     * @param dataSource     * @return     */    @Bean(name="transactionManager")    public PlatformTransactionManager createTransactionManager(DataSource dataSource){        return new DataSourceTransactionManager(dataSource);    }}
/** * 账户的业务层实现类 * * 事务控制应该都是在业务层 */@Service("accountService")@Transactional(propagation= Propagation.SUPPORTS,readOnly=true)//只读型事务的配置public class AccountServiceImpl implements IAccountService{    @Autowired    private IAccountDao accountDao;    @Override    public Account findAccountById(Integer accountId) {        return accountDao.findAccountById(accountId);    }    //需要的是读写型事务配置    @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;            //2.6更新转入账户            accountDao.updateAccount(target);    }}

到此,关于"怎么配置spring基于XML的声明式事务控制"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0