`

【第七章】 对JDBC的支持 之 7.5 集成Spring JDBC及最佳实践 ——跟我学spring3【私塾在线原创】

 
阅读更多

7.5 集成Spring JDBC及最佳实践

大多数情况下Spring JDBC都是与IOC容器一起使用。通过配置方式使用Spring JDBC。

而且大部分时间都是使用JdbcTemplate类(或SimpleJdbcTemplate和NamedParameterJdbcTemplate)进行开发,即可能80%时间使用JdbcTemplate类,而只有20%时间使用其他类开发,符合80/20法则。


Spring JDBC通过实现DaoSupport来支持一致的数据库访问。



Spring JDBC提供如下DaoSupport实现:

  • JdbcDaoSupport:用于支持一致的JdbcTemplate访问;
  • NamedParameterJdbcDaoSupport:继承JdbcDaoSupport,同时提供NamedParameterJdbcTemplate访问;
  • SimpleJdbcDaoSupport:继承JdbcDaoSupport,同时提供SimpleJdbcTemplate访问。

由于JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate类使用DataSourceUtils获取及释放连接,而且连接是与线程绑定的,因此这些JDBC模板类是线程安全的,即JdbcTemplate对象可以在多线程中重用。


接下来看一下Spring JDBC框架的最佳实践:


1)首先定义Dao接口


java代码:
package cn.javass.spring.chapter7.dao;
import cn.javass.spring.chapter7.UserModel;
public interface IUserDao {
    public void save(UserModel model);
    public int countAll();
}


2)定义Dao实现,此处是使用Spring JDBC实现:


java代码:
package cn.javass.spring.chapter7.dao.jdbc;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import cn.javass.spring.chapter7.UserModel;
import cn.javass.spring.chapter7.dao.IUserDao;
public class UserJdbcDaoImpl extends SimpleJdbcDaoSupport implements IUserDao {
  private static final String INSERT_SQL = "insert into test(name) values(:myName)";
  private static final String COUNT_ALL_SQL = "select count(*) from test";
 
  @Override
  public void save(UserModel model) {
      getSimpleJdbcTemplate().update(INSERT_SQL, new BeanPropertySqlParameterSource(model));
  }
  @Override
  public int countAll() {
      return getJdbcTemplate().queryForInt(COUNT_ALL_SQL);
  }
}


此处注意首先Spring JDBC实现放在dao.jdbc包里,如果有hibernate实现就放在dao.hibernate包里;其次实现类命名如UserJdbcDaoImpl,即×××JdbcDaoImpl,当然如果自己有更好的命名规范可以遵循自己的,此处只是提个建议。


3)进行资源配置(resources/chapter7/applicationContext-resources.xml):


java代码:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
      <list>
          <value>classpath:chapter7/resources.properties</value>
      </list>
    </property>
</bean>
 

PropertyPlaceholderConfigurer用于替换配置元数据,如本示例中将对bean定义中的${…}占位符资源用“classpath:chapter7/resources.properties”中相应的元素替换。



java代码:
<bean id="dataSource" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
    <property name="targetDataSource">
      <bean class="org.logicalcobwebs.proxool.ProxoolDataSource">
          <property name="driver" value="${db.driver.class}" />
          <property name="driverUrl" value="${db.url}" />
          <property name="user" value="${db.username}" />
          <property name="password" value="${db.password}" />
          <property name="maximumConnectionCount"
                 value="${proxool.maxConnCount}" />
          <property name="minimumConnectionCount"
                 value="${proxool.minConnCount}" />
          <property name="statistics" value="${proxool.statistics}" />
          <property name="simultaneousBuildThrottle"
                   value="${proxool.simultaneousBuildThrottle}" />
          <property name="trace" value="${proxool.trace}" />
      </bean>
    </property>
</bean>

dataSource定义数据源,本示例使用proxool数据库连接池,并使用LazyConnectionDataSourceProxy包装它,从而延迟获取数据库连接;${db.driver.class}将被“classpath:chapter7/resources.properties”中的“db.driver.class”元素属性值替换。

proxool数据库连接池:本示例使用proxool-0.9.1版本,请到proxool官网下载并添加proxool-0.9.1.jar和proxool-cglib.jar到类路径。

ProxoolDataSource属性含义如下:

  • driver:指定数据库驱动;
  • driverUrl:数据库连接;
  • username:用户名;
  • password:密码;
  • maximumConnectionCount:连接池最大连接数量;
  • minimumConnectionCount:连接池最小连接数量;
  • statistics:连接池使用样本状况统计;如1m,15m,1h,1d表示没1分钟、15分钟、1小时及1天进行一次样本统计;
  • simultaneousBuildThrottle:一次可以创建连接的最大数量;
  • trace:true表示被执行的每个sql都将被记录(DEBUG级别时被打印到相应的日志文件);


4)定义资源文件(classpath:chapter7/resources.properties):


java代码:
proxool.maxConnCount=10
proxool.minConnCount=5
proxool.statistics=1m,15m,1h,1d
proxool.simultaneousBuildThrottle=30
proxool.trace=false
db.driver.class=org.hsqldb.jdbcDriver
db.url=jdbc:hsqldb:mem:test
db.username=sa
db.password=
 


用于替换配置元数据中相应的占位符数据,如${db.driver.class}将被替换为“org.hsqldb.jdbcDriver”。



5)dao定义配置(chapter7/applicationContext-jdbc.xml):


java代码:
<bean id="abstractDao" abstract="true">
    <property name="dataSource" ref="dataSource"/>
</bean>   
<bean id="userDao"
     class="cn.javass.spring.chapter7.dao.jdbc.UserJdbcDaoImpl"
    parent="abstractDao"/> 


首先定义抽象的abstractDao,其有一个dataSource属性,从而可以让继承的子类自动继承dataSource属性注入;然后定义userDao,且继承abstractDao,从而继承dataSource注入;我们在此给配置文件命名为applicationContext-jdbc.xml表示Spring JDBC DAO实现;如果使用hibernate实现可以给配置文件命名为applicationContext-hibernate.xml。


6)最后测试一下吧(cn.javass.spring.chapter7. JdbcTemplateTest):


java代码:
@Test
public void testBestPractice() {
    String[] configLocations = new String[] {
            "classpath:chapter7/applicationContext-resources.xml",
            "classpath:chapter7/applicationContext-jdbc.xml"};
    ApplicationContext ctx = new ClassPathXmlApplicationContext(configLocations);
    IUserDao userDao = ctx.getBean(IUserDao.class);
    UserModel model = new UserModel();
    model.setMyName("test");
    userDao.save(model);
     Assert.assertEquals(1, userDao.countAll());
}

首先读取配置文件,获取IUserDao接口实现,然后再调用IUserDao接口方法,进行数据库操作,这样对于开发人员使用来说,只面向接口,不关心实现,因此很容易更换实现,比如像更换为hibernate实现非常简单。


原创内容,转载请注明出处【http://sishuok.com/forum/blogPost/list/0/2493.html

分享到:
评论

相关推荐

    跟我学spring3(1-7)

    【第一章】 Spring概述 ——跟我学Spring3 【第二章】 IoC 之 2.1 IoC基础 ——跟我学Spring3 【第二章】 IoC 之 2.2 IoC 容器基本原理...【第七章】 对JDBC的支持 之 7.5 集成Spring JDBC及最佳实践 ——跟我学spring3

    跟我学Spring3(7.5)对JDBC的支持之集成Spr

    跟我学Spring3(7.5)对JDBC的支持之集成SpringJDBC及最佳实践Java开发Java经验技巧共5页.pdf.zip

    跟开涛学Spring

    1.34 【第七章】 对JDBC的支持 之 7.5 集成Spring JDBC及最佳实践 ——跟我学spring3 . . . . . . . . .344 1.35 【第八章】 对ORM的支持 之 8.1 概述 ——跟我学spring3 . . . . . . . . . . . . . . . . . . . . ...

    spring对jdbc的支持jar包

    spring对jdbc的支持的测试jar包下载 spring采用的是4.0版本

    开源框架spring详解-----spring对JDBC的支持

    开源框架spring详解-----spring对JDBC的支持开源框架spring详解-----spring对JDBC的支持开源框架spring详解-----spring对JDBC的支持

    spring-jdbc-5.3.15-API文档-中文版.zip

    赠送jar包:spring-jdbc-5.3.15.jar; 赠送原API文档:spring-jdbc-5.3.15-javadoc.jar; 赠送源代码:spring-jdbc-5.3.15-sources.jar; 赠送Maven依赖信息文件:spring-jdbc-5.3.15.pom; 包含翻译后的API文档:...

    Spring Data JDBC与JDBC的区别

    JDBC规范   java.sql和javax.sql两个包中的类与接口(天龙八部):  DataSource:数据源  DriverManager:驱动管理  Driver:JDBC驱动  Connection:数据库连接  Statement:语句,执行SQL  PrepareStatement:...

    开发工具 spring-jdbc-4.3.6.RELEASE

    开发工具 spring-jdbc-4.3.6.RELEASE开发工具 spring-jdbc-4.3.6.RELEASE开发工具 spring-jdbc-4.3.6.RELEASE开发工具 spring-jdbc-4.3.6.RELEASE开发工具 spring-jdbc-4.3.6.RELEASE开发工具 spring-jdbc-4.3.6....

    spring-jdbc jar包.rar

    这个jar 文件包含对Spring 对JDBC 数据访问进行封装的所有类

    java开发之SpringMVC + Spring + SpringJDBC整合.zip

    java开发之SpringMVC + Spring + SpringJDBC整合.zip

    spring-jdbc-4.3.9.RELEASE

    spring-jdbc连接jar包,spring对于jdbc技术的封装,spring容器组成部分

    spring与JDBC集成Demo

    spring与JDBC集成的例子,对初学者有参考价值。

    Spring集成的jdbc编码和事务管理

    Spring集成的jdbc编码和事务管理

    Spring Data JDBC API(Spring Data JDBC 开发文档).CHM

    Spring Data JDBC API。 Spring Data JDBC 开发文档。 官网 Spring Data JDBC API

    spring 整合JDBC 原创代码

    spring 整合JDBC 原创代码 自己导入Jar 文件

    spring_JDBC整合包

    这里整理了齐全的jar包 ,我是在开发的过程中积累的,很多是跟别人要的,希望能帮到系伙伴们.不够的请联系我

    spring jdbc.zip

    包含Springjdbc的相关jar包,Spring 框架对JDBC的简单封装,提供了JdbcTemplate对象简化了JDBC的开发。

    Spring对JDBC的支持

    使用Spring提供的JdbcTemplate模板类实现对数据库的更新和查询操作、使用JdbcTemplate实现具体的DAO类、使用支持具名参数的JDBC模板类对数据库进行操作

    spring-jdbc-3.2.13.jar

    这个jar文件包含对Spring对JDBC数据访问进行封装的所有类。

    Spring JDBC与事务管理

    javaEE 实验三 Spring JDBC与事务管理, 一、实验目的 1、掌握Spring JDBC的配置; 2、掌握JdbcTemplae类中增删改查方法的使用; 3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握...

Global site tag (gtag.js) - Google Analytics