maven包:

  1. <properties>
  2. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  3. <maven.compiler.source>1.7</maven.compiler.source>
  4. <maven.compiler.target>1.7</maven.compiler.target>
  5. <spring.version>4.3.24.RELEASE</spring.version>
  6. </properties>
  7.  
  8. <dependencies>
  9. <dependency>
  10. <groupId>junit</groupId>
  11. <artifactId>junit</artifactId>
  12. <version>4.11</version>
  13. <scope>test</scope>
  14. </dependency>
  15. <!-- Spring -->
  16. <dependency>
  17. <groupId>org.springframework</groupId>
  18. <artifactId>spring-core</artifactId>
  19. <version>${spring.version}</version>
  20. </dependency>
  21. <dependency>
  22. <groupId>org.springframework</groupId>
  23. <artifactId>spring-context</artifactId>
  24. <version>${spring.version}</version>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.springframework</groupId>
  28. <artifactId>spring-web</artifactId>
  29. <version>${spring.version}</version>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.springframework</groupId>
  33. <artifactId>spring-context-support</artifactId>
  34. <version>${spring.version}</version>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework</groupId>
  38. <artifactId>spring-webmvc</artifactId>
  39. <version>${spring.version}</version>
  40. </dependency>
  41. <dependency>
  42. <groupId>org.springframework</groupId>
  43. <artifactId>spring-test</artifactId>
  44. <version>${spring.version}</version>
  45. </dependency>
  46. <!-- aop -->
  47. <dependency>
  48. <groupId>org.springframework</groupId>
  49. <artifactId>spring-aop</artifactId>
  50. <version>${spring.version}</version>
  51. </dependency>
  52. <dependency>
  53. <groupId>org.aspectj</groupId>
  54. <artifactId>aspectjweaver</artifactId>
  55. <version>1.8.13</version>
  56. </dependency>
  57. <dependency>
  58. <groupId>cglib</groupId>
  59. <artifactId>cglib</artifactId>
  60. <version>3.2.4</version>
  61. </dependency>
  62. <!-- spring jdbc -->
  63. <dependency>
  64. <groupId>mysql</groupId>
  65. <artifactId>mysql-connector-java</artifactId>
  66. <version>5.1.47</version>
  67. </dependency>
  68. <dependency>
  69. <groupId>org.springframework</groupId>
  70. <artifactId>spring-jdbc</artifactId>
  71. <version>${spring.version}</version>
  72. </dependency>
  73. <dependency>
  74. <groupId>org.springframework</groupId>
  75. <artifactId>spring-tx</artifactId>
  76. <version>${spring.version}</version>
  77. </dependency>
  78. <!-- C3p0-->
  79. <dependency>
  80. <groupId>com.mchange</groupId>
  81. <artifactId>c3p0</artifactId>
  82. <version>0.9.5.4</version>
  83. </dependency>
  84. </dependencies>

applicationContext.xml:

C3p0连接配置:

  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" xmlns:aop="http://www.springframework.org/schema/aop"
  4. xmlns:tx="http://www.springframework.org/schema/tx"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
  6.  
  7. <!-- 配置Jdbc模板-->
  8. <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  9. <property name="dataSource" ref="dataSource"></property>
  10. </bean>
  11.  
  12. <bean id="userDao" class="com.etc.dao.UserDAO">
  13. <property name="jdbcTemplate" ref="jdbcTemplate"></property>
  14. </bean>
  15.  
  16. <bean id="bankDao" class="com.etc.dao.BankDao">
  17. <property name="jdbcTemplate" ref="jdbcTemplate"></property>
  18. </bean>
  19.  
  20. <bean id="bankServiceImpl" class="com.etc.service.serviceImpl.BankServiceImpl">
  21. <property name="bankDao" ref="bankDao"></property>
  22. </bean>
  23.  
  24. <!--基于数据源的事务管理器,通过属性引用数据源-->
  25. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  26. <property name="dataSource" ref="dataSource"></property>
  27. </bean>
  28. <aop:config>
  29. <aop:pointcut expression="execution(* com.etc.service.*.*(..))" id="pc"/>
  30. <aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/>
  31. </aop:config>
  32.  
  33. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  34. <tx:attributes>
  35. <tx:method name="*"/>
  36. </tx:attributes>
  37. </tx:advice>
  38.  
  39. <!-- 配置数据源 -->
  40. <bean id="dataSource"
  41. class="com.mchange.v2.c3p0.ComboPooledDataSource"
  42. destroy-method="close">
  43. <property name="driverClass">
  44. <value>com.mysql.jdbc.Driver</value>
  45. </property>
  46. <property name="jdbcUrl">
  47. <value>jdbc:mysql://localhost:3310/day07?characterEncoding=UTF-8</value>
  48. </property>
  49. <property name="user">
  50. <value>root</value>
  51. </property>
  52. <property name="password">
  53. <value>123456</value>
  54. </property>
  55.  
  56. <!--连接池中保留的最小连接数。-->
  57. <property name="minPoolSize">
  58. <value>5</value>
  59. </property>
  60.  
  61. <!--连接池中保留的最大连接数。Default: 15 -->
  62. <property name="maxPoolSize">
  63. <value>30</value>
  64. </property>
  65.  
  66. <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
  67. <property name="initialPoolSize">
  68. <value>10</value>
  69. </property>
  70.  
  71. <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
  72. <property name="maxIdleTime">
  73. <value>60</value>
  74. </property>
  75.  
  76. <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
  77. <property name="acquireIncrement">
  78. <value>5</value>
  79. </property>
  80.  
  81. <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements
  82. 属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
  83. 如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->
  84. <property name="maxStatements">
  85. <value>0</value>
  86. </property>
  87.  
  88. <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
  89. <property name="idleConnectionTestPeriod">
  90. <value>60</value>
  91. </property>
  92.  
  93. <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
  94. <property name="acquireRetryAttempts">
  95. <value>30</value>
  96. </property>
  97.  
  98. <!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效
  99. 保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试
  100. 获取连接失败后该数据源将申明已断开并永久关闭。Default: false-->
  101. <property name="breakAfterAcquireFailure">
  102. <value>true</value>
  103. </property>
  104.  
  105. <!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的
  106. 时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
  107. 等方法来提升连接测试的性能。Default: false -->
  108. <property name="testConnectionOnCheckout">
  109. <value>false</value>
  110. </property>
  111. </bean>
  112. </beans>

userDao

  1. package com.etc.dao;
  2.  
  3. import com.etc.entity.User;
  4. import org.springframework.jdbc.core.JdbcTemplate;
  5. import org.springframework.jdbc.core.RowMapper;
  6.  
  7. import java.sql.ResultSet;
  8. import java.sql.SQLException;
  9. import java.util.List;
  10.  
  11. public class UserDAO {
  12.  
  13. private JdbcTemplate jdbcTemplate;
  14.  
  15. public void save() {
  16. jdbcTemplate.execute("insert into t_user (username,password) values ('3','4')");
  17. }
  18.  
  19. public List<User> queryAll() {
  20. return jdbcTemplate.query("select * from t_user", new RowMapper<User>() {
  21. @Override
  22. public User mapRow(ResultSet resultSet, int i) throws SQLException {
  23. return result(resultSet);
  24. }
  25. });
  26. }
  27.  
  28. public User query(User user) {
  29. return jdbcTemplate.queryForObject("select * from t_user where id=?", new Object[]{user.getId()}, new RowMapper<User>() {
  30. @Override
  31. public User mapRow(ResultSet resultSet, int i) throws SQLException {
  32. return result(resultSet);
  33. }
  34. });
  35. }
  36.  
  37. public static User result(ResultSet resultSet) throws SQLException {
  38. User user = new User();
  39. user.setId(resultSet.getInt("id"));
  40. user.setUsername(resultSet.getString("username"));
  41. user.setPassword(resultSet.getString("password"));
  42. return user;
  43. }
  44.  
  45. public JdbcTemplate getJdbcTemplate() {
  46. return jdbcTemplate;
  47. }
  48.  
  49. public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
  50. this.jdbcTemplate = jdbcTemplate;
  51. }
  52. }

Spring与C3p0连接数据库对事务操作的更多相关文章

  1. spring学习(八)事务操作

    一.事务的概念: 事务是并发控制的单位,一系列操作组成的工作单元,该工作单元内的操作是不可分割的,也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做,所有操作必须成功完成,否则 ...

  2. JavaWeb_(Spring框架)整合Mybatis加入事务操作数据库

    整合Mybatis a)导包: i.Spring:基本包.aop.aspects.jdbc.tx.test: ii.Mybatis:mybatis-3.4.6 iii.整合包:mybatis-spri ...

  3. Spring Framework 中启动 Redis 事务操作

    背景: 项目中遇到有一系列对Redis的操作,并需要保持事务处理. 环境: Spring version 4.1.8.RELEASE Redis Server 2.6.12 (64位) spring- ...

  4. spring学习(三) ———— spring事务操作

    前面一篇博文讲解了什么是AOP.学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理. --wh 一.jdbcTemplate 什么是JdbcTem ...

  5. Spring 中的事务操作、注解、以及 XML 配置

    事务 事务全称叫数据库事务,是数据库并发控制时的基本单位,它是一个操作集合,这些操作要么不执行,要么都执行,不可分割.例如我们的转账这个业务,就需要进行数据库事务的处理. 转账中至少会涉及到两条 SQ ...

  6. spring(三) spring事务操作

    前面一篇博文讲解了什么是AOP.学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理. --wh 一.jdbcTemplate 什么是JdbcTem ...

  7. spring的事务操作(重点)

    这篇文章一起来回顾复习下spring的事务操作.事务是spring的重点, 也是面试的必问知识点之一. 说来这次面试期间,也问到了我,由于平时用到的比较少,也没有关注过这一块的东西,所以回答的不是特别 ...

  8. Spring中的事务操作

    事务的特性 原子性:强调事务的不可分割. 一致性:事务的执行的前后数据的完整性保持一致. 隔离性:一个事务执行的过程中,不应该受到其他事务的干扰. 持久性:事务一旦结束,数据就持久化到数据库. 如果不 ...

  9. (转)Spring中的事务操作

    http://blog.csdn.net/yerenyuan_pku/article/details/70024364 事务的回顾 什么是事务 事务是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么 ...

随机推荐

  1. 【等价的穿越】Burnside引理&Pólya计数法

    Problem 起源: SGU 294 He's Circle 遗憾的是,被吃了. Poj有道类似的: Mission 一个长度为n(1≤n≤24)的环由0,1,2组成,求有多少本质不同的环. 实际上 ...

  2. RestFul 与 RPC

    原文地址:https://blog.csdn.net/u014590757/article/details/80233901 RPC.REST API深入理解 一:RPC RPC 即远程过程调用(Re ...

  3. 学习JDK1.8集合源码之--LinkedHashSet

    1. LinkedHashSet简介 LinkedHashSet继承自HashSet,故拥有HashSet的全部API,LinkedHashSet内部实现简单,核心参数和方法都继承自HashSet,只 ...

  4. 移动web图片高度自适应的解决方案

    由于图片的加载是在dom加载完成之后进行的,于是,在手机端浏览网页时,经常会看到页面刚打开时很多内容叠在一起,当图片加载完成后,页面会由于图片加载完成出现明显的抖动 针对这个问题,有以下几种解决方案 ...

  5. 各种高度的区别及height、clientHeight、scrollHeight、offsetHeight的区分

    1.height.clientHeight.scrollHeight.offsetHeight 我们来实现test中的onclick事件    function justAtest()    {    ...

  6. Permutations 全排列 回溯

    Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...

  7. .net WebServer示例及调用(接口WSDL动态调用 JAVA)

    新建.asmx页面 using System; using System.Collections.Generic; using System.Linq; using System.Web; using ...

  8. Intellij IDEA设置忽略部分类编译错误

    有些时候我们的项目中有些错误,但这些错误并不影响项目的整体运行(或许是没有使用到),默认情况下idea是无法通过编译的,因此也就无法部署运行,要达到正确运行项目的目的需要作一些设置才行. 设置Inte ...

  9. QT UI 线程为什么卡死?

    我的工程是由三个线程处理不同任务构成的,其中UI用于显示,还有数据处理和数据接收发送线程. 在运行的过程中发现由于数据处理线程不及时,超过了设定的100ms,导致UI卡死,几个周期后又恢复,接着又卡死 ...

  10. Linux使用注意事项

    1.Linux严格区分大小写 2.Linux中所有内容以文件形式保存,包括硬件 3.修改任何设置,若想永久生效,都需要修改配置文件(除非某些发现版已经默认设置为同时修改内存和硬盘数据). 4.Linu ...