spring事务操作的完全注解声明式事务管理和注解+xml声明式事务管理

事务:
使用完全注解开发:
User类:

public class User {
private Integer id;
private String name;
private Integer money;
    public void setId(Integer id) {
        this.id = id;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setMoney(Integer money) {
        this.money = money;
    }
}

UserDao类:

public interface UserDao {
    public void lostMoney();
    public void addMoney();
}

UserDaoImpl类:

@Repository
public class UserDaoImpl implements UserDao{
    @Autowired
    JdbcTemplate jdbcTemplate;
        
    @Override
    public void lostMoney() {
        String sql="update account set money=money-? where name=?";
                jdbcTemplate.update(sql,100,"lbl");
    }
    @Override
    public void addMoney() {
        String sql="update account set money=money+? where name=?";
                jdbcTemplate.update(sql,100,"wudi");
    }
}

UserService类:
@Transactional开启事务

//@Transactional(propagation = Propagation.REQUIRED)默认是propagation = Propagation.REQUIRED
@Transactional(readOnly = false,timeout = -1,propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED)//在类上加这个注解表示这个类的全部方法都是事务
@Service//             默认是false      默认-1
public class UserService {
            @Autowired
            UserDao userDao;
            
        public  void account(){
                try {
                    //开启事务
                    //进行业务操作
                    userDao.addMoney();
                    userDao.lostMoney();
                    //没有发生异常,提交事务
                }catch (Exception e){
                        //出现异常,事务回滚
                }
        }
}

Config类:
代替了xml配置

@Configuration
@ComponentScan(basePackages = "com.lbl")
@EnableTransactionManagement//开启事务
public class TxConfig {
   	@Bean
    public DruidDataSource getDruidDataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
         druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
         druidDataSource.setUrl("jdbc:mysql://localhost:3306/userdb");
         druidDataSource.setUsername("root");
         druidDataSource.setPassword("root");
         return druidDataSource;
    }
    //创建jdbctemplate对象
    
    @Bean
    public JdbcTemplate getJdbcTemplate(DataSource dataSource){
        //到ioc中找到类型是DataSource的对象
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        //注入DataSource
        jdbcTemplate.setDataSource(dataSource);
        return jdbcTemplate;
    }//创建事务管理器
    
    @Bean
    public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource){
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
        transactionManager.setDataSource(dataSource);
        return transactionManager;
    }
}

最后测试类:

 @Test
    public void  test2(){
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(TxConfig.class);
        UserService userService = context.getBean("userService", UserService.class);
        userService.account();
    }

使用xml和注解完成事务:
bean.xml:

	设置注解扫描范围
    <context:component-scan base-package="com.lbl"></context:component-scan>
    
<!--注解都要用一个@bean代替一个<bean>标签-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/userdb"></property>
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
    </bean>

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource"  ref="dataSource"></property>
    </bean>
<!--    创建事务管理器-->
    <bean id="transactionManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--   注入数据源  -->
        <property name="dataSource" ref="dataSource"></property>
    </bean>
<!--开启事务注解-->
            <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>

与Config类起同样作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值