spring开启注解的三种方式
2017-11-22 14:38
1181 查看
本章使用c3p0做演示
其实很好记,使用spring操作数据库创建jdbcTemplate ,使用spring开启事务创建TransactionTemplate
配置xml
以上俩种方法都是很麻烦的,spring怕没有人使用,就创建了一种很简单的用法,
编写测试类 (只需要在测试类上加上注解(@Transactional)即可)
以上就是spring提供的注解方式,第一种第二种都是纯了解的,,,开发不会有人用的,所以只需要记第三种就行
方法一,编辑试事务
开启事务核心类 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——@Autowired注解和启动自动扫描的三种方式
- Spring中bean三种注解方式。
- spring aop注解的三种方式
- 深刻剖析spring三种注入方式以及使用注解的原理
- Spring学习----------Bean配置的三种方式(XML、注解、Java类)介绍与对比
- Spring中bean三种注解方式。
- spring security 注解@EnableGlobalMethodSecurity的三种开启注解方式
- Spring学习(二十二) Bean配置的三种方式(XML、注解、Java类)介绍与对比
- spring整合shiro使用注解方式配置
- 三种整合 Struts 应用程序与 Spring 的方式
- Spring实例化Bean的三种方式及Bean的类型(activiti实战)
- spring中三种实例化bean的方式
- Spring的三种注入方式?
- Spring 使用注解方式进行事务管理
- spring+springmvc+ibatis整合注解方式实例
- Spring Spring 静态属性 注入的三种方式
- MyBatis+Spring在注解@Autowried后通过反射的方式调用方法获取注入的Service或DAO对象为空
- spring实例化javabean的三种方式分享
- spring配置datasource三种方式
- 详解Spring通过@Value注解注入属性的几种方式