您的位置:首页 > 编程语言 > Java开发

spring开启注解的三种方式

2017-11-22 14:38 1181 查看
本章使用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<Object>() {

@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>

<!--创建jdbc模板-->
<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">

<!-- 这段代码的意思就是: 到底前面的表达式找到的方法,哪些才能用事务?
save 表示,前面的表达式找到的所有方法都用事务管理
如果只写了一个save , 表示前面的表达式如果找到1万个方法,但是也只能有save方法用事务管理起来。
-->

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

<!--使用aop-->
<aop:config >
<!--创建切入点-->
<aop:pointcut id="transaction" expression="execution(* cn.itcast.demo.demo.*(..))"/>

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


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

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

<!--创建数据库实例-->
<bea
c0b6
n 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>

<!--创建jdbc模板-->
<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提供的注解方式,第一种第二种都是纯了解的,,,开发不会有人用的,所以只需要记第三种就行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring 事务