spring开启注解的三种方式

本章使用c3p0做演示

方法一,编辑试事务

开启事务核心类 DataSourceTransactionManager,不管是哪一种方式都需要创建该对象,该方式需要记住的类 TransactionTemplate,

其实很好记,使用spring操作数据库创建jdbcTemplate ,使用spring开启事务创建TransactionTemplate

public class Transaction_01  {

    public void Test_demo() throws PropertyVetoException {

        //创建Spring提供的事务模板
        TransactionTemplate template = new TransactionTemplate();

        //创建c3p0连接池
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        //设置数据库账号
        dataSource.setUser("root");
        //设置密码
        dataSource.setPassword("1039191520");
        //设置驱动
        dataSource.setDriverClass("com.mysql.jdbc.Driver");
        //设置url
        dataSource.setJdbcUrl("jdbc:mysql:///springTransaction");

        //创建数据库管理员
        DataSourceTransactionManager manager = new DataSourceTransactionManager();

        //封装参数
        manager.setDataSource(dataSource);

        //设置管理员
        template.setTransactionManager(manager);

//        开启事务
        template.execute(new TransactionCallback() {

            @Override
            public Object doInTransaction(TransactionStatus transactionStatus) {
                try {
                    //创建jdbcTemplate来操作数据库
                    JdbcTemplate jdbcTemplate = new JdbcTemplate();
                    jdbcTemplate.setDataSource(dataSource);

                    //编写sql
                    String sql = "insert into dNmae values('zs')";

//                执行sql
                    jdbcTemplate.update(sql);
                } catch (DataAccessException e) {
                    e.printStackTrace();
                    //回滚事务
                    transactionStatus.setRollbackOnly();
                }

                return null;            //doInTransaction : 表示这个方法是在事务内容执行

            }
        });
    }
}


注解式事务(AOP方式)

创建一个需要开启事务的演示类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class demo {

    @Autowired
    private JdbcTemplate jdbc;

    @Test
    public void save(){

        //编写sql
        String sql = "insert into table_name values('ws')";
        jdbc.update(sql);
    }
}

配置xml

 
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="url" value="jdbc:mysql:///spring_day04"/>
        <property name="username" value="root"/>
        <property name="password" value="1039191520"/>
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    bean>

    
    <bean id="jdbc" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    bean>

    
    <bean id="manager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       
        <property name="dataSource" ref="dataSource"/>
    bean>

    <tx:advice id="advice" transaction-manager="manager">

        

        <tx:attributes>
            <tx:method name="save" />
        tx:attributes>
    tx:advice>


    
    <aop:config >
        
        <aop:pointcut id="transaction" expression="execution(* cn.itcast.demo.demo.*(..))"/>

        <aop:advisor advice-ref="advice" pointcut-ref="transaction"/>
    aop:config>

以上俩种方法都是很麻烦的,spring怕没有人使用,就创建了一种很简单的用法,

开发中常用的开启事务方式


    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="url" value="jdbc:mysql:///spring_day04"/>
        <property name="username" value="root"/>
        <property name="password" value="1039191520"/>
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    bean>

    
    <bean id="jdbc" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    bean>

    
    <bean id="manager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       
        <property name="dataSource" ref="dataSource"/>
    bean>

    <tx:annotation-driven transaction-manager="manager"/>

编写测试类 (只需要在测试类上加上注解(@Transactional)即可)

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
@Transactional
public class demo {

    @Autowired
    private JdbcTemplate jdbc;

    @Test
    public void save(){

        String sql = "insert into table_name values('ws')";
        jdbc.update(sql);
    }
}

以上就是spring提供的注解方式,第一种第二种都是纯了解的,,,开发不会有人用的,所以只需要记第三种就行

你可能感兴趣的:(框架的学习)