在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

spring连接jdbc-事务

2016-8-29 13:17| 发布者: zhangjf| 查看: 674| 评论: 0

摘要: 1、新建项目,名为transactionExample2、导入jar包导入了spring中的所有jar包和另外两个jar包:3、applicationContext.xml?xml version=1.0 encoding=UTF-8?beans xmlns=http://www.springframework.org/schema/bean ...

1、新建项目,名为transactionExample
2、导入jar包
导入了spring中的所有jar包和另外两个jar包:

3、applicationContext.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:util="http://www.springframework.org/schema/util"
  6. xmlns:tx="http://www.springframework.org/schema/tx"
  7. xmlns:aop="http://www.springframework.org/schema/aop"
  8. xsi:schemaLocation="
  9. http://www.springframework.org/schema/beans
  10. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  11. http://www.springframework.org/schema/context
  12. http://www.springframework.org/schema/context/spring-context-3.0.xsd
  13. http://www.springframework.org/schema/util
  14. http://www.springframework.org/schema/util/spring-util-3.0.xsd
  15. http://www.springframework.org/schema/tx
  16. http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  17. http://www.springframework.org/schema/aop
  18. http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  19. ">
  20. <!-- 使用jdbc作为持久方案,仅仅是得到连接 -->
  21. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  22. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  23. <property name="url" value="jdbc:mysql://localhost:3306/book" />
  24. <property name="username" value="root" />
  25. <property name="password" value="sll" />
  26. </bean>
  27. <bean id="jdbcDaoSupport" class="dao.JdbcDaoSupport" abstract="true">
  28. <property name="dataSource" ref="dataSource"></property>
  29. </bean>
  30. <!-- 定义jdbcTemplateDao的bean -->
  31. <bean id="jdbcTemplateDao" class="dao.JdbcTemplateDao" parent="jdbcDaoSupport">
  32. </bean>
  33. <!-- 定义jdbcTemplateService的bean -->
  34. <bean id="jdbcTemplateService" class="service.JdbcTemplateService">
  35. <property name="jdbcTemplateDao">
  36. <ref bean="jdbcTemplateDao"/>
  37. </property>
  38. </bean>
  39. <!-- 配置jdbc事务管理器 -->
  40. <bean id="jdbcTxManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  41. <property name="dataSource" ref="dataSource" />
  42. </bean>
  43. <!-- 对domain这个方法实现事务 -->
  44. <tx:advice id="txAdvice" transaction-manager="jdbcTxManager">
  45. <tx:attributes>
  46. <tx:method name="*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
  47. </tx:attributes>
  48. </tx:advice>
  49. <!-- 事务控制位置 -->
  50. <aop:config expose-proxy="true">
  51. <aop:pointcut id="serviceOperation"
  52. expression="execution(* service.*.service.*(..))" />
  53. <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" />
  54. </aop:config>
  55. </beans>
复制代码

4、JdbcTemplateService.java
service方法中含有save、update的delete三个方法。在save方法之后,程序出错,所以事务会回滚,之前的save操作会失效,不会保存到数据库中。

  1. public class JdbcTemplateService {
  2. private JdbcTemplateDao jdbcTemplateDao;
  3. public void domain(){
  4. jdbcTemplateDao.save();
  5. int i = 2/0;//这里出错了,事务会回滚,之前的save无效
  6. jdbcTemplateDao.update();
  7. jdbcTemplateDao.delete();
  8. }
  9. public JdbcTemplateDao getJdbcTemplateDao() {
  10. return jdbcTemplateDao;
  11. }
  12. public void setJdbcTemplateDao(JdbcTemplateDao jdbcTemplateDao) {
  13. this.jdbcTemplateDao = jdbcTemplateDao;
  14. }
  15. }
复制代码

5.JdbcTemplateDao.java
在这里需要注意的是,jdbc默认是一个语句一个事务,所以,当要实现spring配置的事务的时候,需要加上conn.setAutoCommit(false);否则回滚操作会失效。

  1. public class JdbcTemplateDao extends JdbcDaoSupport{
  2. private PreparedStatement pre = null;
  3. private Connection conn;
  4. //异常向上层抛出
  5. public void save() {
  6. String insertSql = "insert into user values(?,?)";
  7. try {
  8. conn = getDataSource().getConnection();
  9. conn.setAutoCommit(false);
  10. pre = conn.prepareStatement(insertSql);
  11. pre.setString(1, "hahaha");
  12. pre.setString(2, "happy");
  13. pre.executeUpdate();
  14. } catch (SQLException e) {
  15. e.printStackTrace();
  16. }
  17. }
  18. public void delete(){
  19. ...
  20. }
  21. public void update(){
  22. ...
  23. }
  24. }
复制代码

6、JdbcDaoSupport.java
本来JdbcDaoSupport 这个类应该是本来就存在的,但是当我在JdbcTemplateDao.java中继承了JdbcDaoSupport.java这个类之后,得到的DataSource总是为空,所以我另写了一个JdbcDaoSupport.java,里面有set和get方法,这样就能正确地得到DataSource的值。

  1. public class JdbcDaoSupport {
  2. private DriverManagerDataSource driverManagerDataSource;
  3. public DriverManagerDataSource getDataSource() {
  4. return driverManagerDataSource;
  5. }
  6. public void setDataSource(DriverManagerDataSource driverManagerDataSource) {
  7. this.driverManagerDataSource = driverManagerDataSource;
  8. }
  9. }
复制代码

7、测试类

  1. /**
  2. * 用于测试的main函数
  3. * @author Administrator
  4. *
  5. */
  6. public class test {
  7. /**
  8. * @param args
  9. * @throws SQLException
  10. * @throws SQLException
  11. */
  12. public static void main(String[] args){
  13. String[] configLocations = new String[] {"applicationContext.xml"};
  14. //应该引入spring的jar包
  15. ApplicationContext ctx = new ClassPathXmlApplicationContext(configLocations);
  16. JdbcTemplateService j = ctx.getBean(JdbcTemplateService.class);
  17. j.domain();
  18. }
  19. }
复制代码

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-6 19:54

Copyright 2015-2025 djqfx

返回顶部