《笔者带你剖析Spring3.x JDBC》
前言
笔者在之前的系列博文中,曾经讲解过Apache旗下的DbUtils工具(http://gao-xianglong.iteye.com/blog/2166444)。简单来说,这一款工具对JDBC实施了非常轻量级的封装,只要你会使用JDBC,估计半个小时,或许你就能够熟练掌握DbUtils的基本用法,当然笔者并不是让你立即换掉你生产环境中的持久层选项,而是告诉你,在互联网场景下,越简单,越纯粹,越贴近原生是最好的,因为这样会拥有更好的灵活性、伸缩性,以及高性能(毕竟封装层次越高,开销越大,同样组件的“可见性”会更加模糊,对于开发人员而言,则为黑盒)。
无论从哪一个角度来看,DbUtils都是一款不错的持久层工具,天生具备优秀的灵活性、伸缩性,但是与此同时也伴随着一定的缺陷。试想一下,在一些项目周期较紧的情况下,你的Project Manager是不太可能给你足够充裕的时间去编写相应的Template(除非项目组编写有公共组件),并且在集成有Spring环境的项目中,也确实没有太多必要将DbUtils再次集成。看到这里,笔者本篇博文的主角诞生了,那就是Spring JDBC。同Apache的DbUtils相比,尽管Spring JDBC在封装上会显得更加“丰满”一些,但随之提升的简易性会大大缩短项目的开发周期,提高生产效率,因此所带来的一些额外开销也就不值一提。这便是笔者在当前项目中选择它的最主要的原因,有现成的Templet,以及同样不失灵活性、伸缩性的前提下,选择Spring JDBC作为持久层的开发工具将会比DbUtils更加诱人,那么说道这里,你,动心了吗?
目录
一、下载Spring JDBC的相关构件;
二、配置参数;
三、基于Spring JDBC的CRUD示例;
四、RowMapper;
五、JdbcTemplate;
六、基于@注解的声明式事物管理;
一、下载Spring JDBC的相关构件
笔者使用Maven对项目进行管理,自然而言,就不会再单独进行Spring JDBC构件的下载,而是由Maven来对相关构件进行管理。在本篇博文中,笔者所使用的Spring版本为3.2.13,如下所示:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${org.springframework-version}</version> <exclusions> <!-- Exclude Commons Logging in favor of SLF4j --> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${org.springframework-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>${org.springframework-version}</version> </dependency>
二、配置参数
当Maven成功下载好Spring JDBC所需的构件后,接下来的任务就是在Spring持久层配置文件中配置相关的数据源信息。首先需要配置的是数据源信息,考虑到后期的维护性,数据源信息笔者单独存放在一个properties文件中,在Spring持久层配置文件中通过标签“<context:property-placeholder/>”进行加载。这里笔者插一句题外话,在一些大型的分布式+集群环境的项目中,最好采用集中式的资源配置方式,而非继续采用这种静态配置文件的方式,因为如果一旦配置信息发生改变时,可以动态响应,并通知程序实时更新,以此更大程度上降低维护成本,这里笔者推荐淘宝开源的Diamond中间件(实在不行,存放在DB也行,自己写个组件执行参数变化后的动态响应即可)。
回到正题,数据源信息无非就是定义了一堆与DB链接相关的参数以及连接池相关的信息,笔者在本篇博文中所使用的DB连接池为c3p0,当然你也可以选用其它的DB连接池,笔者在此不过多进行讲解。关于Spring JDBC的相关数据源配置参数,如下所示:
<!-- 加载本地数据源配置信息 --> <context:property-placeholder location="classpath:*.properties" /> <!-- 定义数据源信息 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="${name}" /> <property name="password" value="${password}" /> <property name="jdbcUrl" value="${jdbcUrl}" /> <property name="driverClass" value="${driverClass}" /> <property name="initialPoolSize" value="${initialPoolSize}" /> <property name="minPoolSize" value="${minPoolSize}" /> <property name="maxPoolSize" value="${maxPoolSize}" /> <property name="maxStatements" value="${maxStatements}" /> <property name="maxIdleTime" value="${maxIdleTime}" /> </bean> <!-- 配置JdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean>
相关推荐
第3章:讲解Spring IoC容器的知识,通过具体的实例详细地讲解IoC概念。同时,对Spring框架的三个最重要的框架级接口进行了剖析,并对Bean的生命周期进行讲解。 第4章:讲解如何在Spring配置文件中使用Spring 3.0...
16.7.3 使用Spring RestTemplate测试 16.7.4 使用Selenium测试 16.8 小结 第17章 实战案例开发 17.1 论坛案例概述 17.1.1 论坛整体功能结构 17.1.2 论坛用例描述 17.1.3 主要功能流程描述 17.2 系统设计 17.2.1 技术...
16.7.3 使用Spring RestTemplate测试 16.7.4 使用Selenium测试 16.8 小结 第17章 实战案例开发 17.1 论坛案例概述 17.1.1 论坛整体功能结构 17.1.2 论坛用例描述 17.1.3 主要功能流程描述 17.2 系统设计 17.2.1 技术...
spring
spring-jdbc.rar源码 学习分析用,了解jdbc内部原理,connection事务关系很有用
给大家分享一套课程,Java架构师之源码分析专题SpringBoot2.x、Spring5、SpringMVC、Mybatis源码分析,希望对大家学习有帮助。
该课程是一套政府对企业的管理信息系统,所以安全非常重要,本系统基于springSecurity3.x的安全管理,并且使用目前最新报表技术(JasperReport5.1+Ireport5.1)完成交叉表及饼图设计,还给同学们介绍了基于JAX-WS的web...
本文介绍如何在 Spring Boot 3.X 中利用 Kafka 实现高效的消息传递功能。Kafka 是一个分布式流处理平台,适用于实时数据流处理、日志收集与分析、事件驱动等场景。通过集成 Kafka,我们可以实现可靠的异步消息传递,...
本文介绍如何在 Spring Boot 3.X 中利用 Kafka 实现高效的消息传递功能。Kafka 是一个分布式流处理平台,适用于实时数据流处理、日志收集与分析、事件驱动等场景。通过集成 Kafka,我们可以实现可靠的异步消息传递,...
3 Spring4 扩展分析(一)35:49 4 Spring4 扩展分析(二)21:11 5 Spring Boot 快速入门24:01 6 Spring Boot 配置分析(一)38:26 7 Spring Boot 配置分析(二)35:47 8 Spring Boot 自动配置32:44 9 Spring ...
陈开雄 Spring+3.x企业应用开发实战光盘源码 !!!!压缩包的jar包太多,太大无法上传,请谅解,需要的可以联系我 QQ:349721489 第1章:对Spring框架进行宏观性的概述,力图使读者建立起对Spring整体性的认识。 ...
本文介绍如何在 Spring Boot 3.X 中利用 Kafka 实现高效的消息传递功能。Kafka 是一个分布式流处理平台,适用于实时数据流处理、日志收集与分析、事件驱动等场景。通过集成 Kafka,我们可以实现可靠的异步消息传递,...
本文介绍如何在 Spring Boot 3.X 中利用 Kafka 实现高效的消息传递功能。Kafka 是一个分布式流处理平台,适用于实时数据流处理、日志收集与分析、事件驱动等场景。通过集成 Kafka,我们可以实现可靠的异步消息传递,...
从github下载spring-framework-3.2.x源码,且已成功构建eclipse版本,可以直接下载导入eclipse进行spring源码分析!
这是一篇总结Spring5源码深度解析的文档,By 某Tom老师,很经典,讲解深入浅出!
Spring源码分析.pdf
spring 5.2.x中文注释源码,还有分析案例哦
Spring Boot 2.x 实战到源码分析视频教程,从Spring Boot 入门,到实战,到源码分析,带实战源码
《Hadoop 2.X HDFS源码剖析》以Hadoop 2.6.0源码为基础,深入剖析了HDFS 2.X中各个模块的实现细节,包括RPC框架实现、Namenode实现、Datanode实现以及HDFS客户端实现等。《Hadoop 2.X HDFS源码剖析》一共有5章,其中...