`
maakey
  • 浏览: 16529 次
文章分类
社区版块
存档分类
最新评论

【第七章】 对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

分享到:
评论

相关推荐

    跟开涛学Spring

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

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

    本篇将深入探讨Spring 3如何集成Spring JDBC以及最佳实践。 首先,Spring JDBC的核心组件是JdbcTemplate,它是Spring提供的一个模板类,用于简化JDBC编程。通过使用JdbcTemplate,开发者可以避免编写大量的样板代码...

    spring对jdbc的支持jar包

    本文将深入探讨Spring对JDBC(Java Database Connectivity)的支持,以及如何在实际项目中使用这些功能。 首先,Spring JDBC的核心是`org.springframework.jdbc`包,它提供了一套高级抽象,用于简化数据库操作。在...

    跟我学spring

    7.1节概述Spring对JDBC的支持,7.2节介绍JDBC模板类,7.3节讨论关系数据库操作对象化的方法,7.4节和7.5节介绍Spring提供的其他帮助和集成Spring JDBC及最佳实践。 【第八章】对ORM(对象关系映射)的支持。ORM框架...

    Spring Data JDBC与JDBC的区别

    集成Spring Data JDBC可以减少代码量,提高可维护性,并且由于Spring的其他模块(如Spring MVC和Spring Security)与之良好集成,可以构建更复杂的Web应用。例如,Spring MVC提供了模型-视图-控制器架构,使业务逻辑...

    跟我学spring3

    压缩包中的"gen-wo-xue-spring.pdf"可能是教程的概述或部分章节,"跟我学spring3(1-7).pdf"和"跟我学spring3(8-13).pdf"分为了两部分,覆盖了从基础到进阶的内容。"跟我学spring3-源码.rar"包含了示例代码,方便读者...

    跟我学spring3pdf,高清

    《跟我学Spring3》是一本深入浅出的Spring框架学习指南,...通过阅读这两部分PDF(跟我学spring3(8-13).pdf和跟我学spring3(1-7).pdf),你将能够逐步构建起对Spring框架的全面认识,从而在Java开发领域更上一层楼。

    spring-jdbc jar包.rar

    "spring-jdbc jar包"包含了Spring框架中与JDBC相关的所有类和接口,为开发者提供了强大的数据访问支持。 首先,我们来看看Spring JDBC的核心组件: 1. **JdbcTemplate**:这是Spring JDBC的核心类,它通过模板方法...

    spring_JDBC整合包

    Spring JDBC是Spring框架的一个重要模块,它简化了Java数据库连接(JDBC)的使用,提供了更高级别的抽象,使得数据库操作更加简洁、易管理和模块化。这个"spring_JDBC整合包"显然包含了进行Spring JDBC开发所需的...

    跟我学spring3(总共13章)8

    《跟我学Spring3》系列教程是为初学者和有经验的开发者提供的一份全面而深入的Spring框架学习资源。Spring3作为Java企业级应用开发的重要框架,它的核心特性包括依赖注入、AOP(面向切面编程)、数据访问、Web开发等...

    跟我学Spring,Spring3学习资料

    - **集成SpringJDBC及最佳实践:** 通过示例展示了如何整合Spring与JDBC,并给出了最佳实践的建议。 ### 7. 对ORM的支持 - **概述:** ORM(对象关系映射)框架与Spring的集成提供了对象化数据库操作的能力。 - **...

    开涛 跟我学spring3 pdf+源码

    这本书分为两部分PDF文档:"开涛 跟我学spring3(1-7).pdf" 和 "开涛 跟我学spring3(8-13).pdf",分别覆盖了Spring框架的核心概念和技术,旨在帮助读者全面理解并掌握Spring框架的应用。 在第一部分(1-7章)中,...

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

    3. 集成SpringJDBC:配置数据源,创建JdbcTemplate实例,然后在Service层中使用它进行数据库操作。 4. 连接数据库:设置数据库连接参数,如URL、用户名和密码,以及驱动类。 5. 编写Controller:定义处理HTTP请求...

    廖雪峰 Spring 2.0 核心技术与最佳实践 高清扫描版

    《Spring 2.0 核心技术与最佳实践》是由知名IT教育家廖雪峰编写的教程,旨在为从初学者到高级工程师提供全面而深入的Spring 2.0框架理解与应用指导。Spring框架是Java开发中的核心工具,尤其在企业级应用中广泛使用...

    跟我学spring3(1-13)

    《跟我学Spring3》是一本深入浅出介绍Spring框架的电子书,分为两部分,分别是“跟我学Spring3(8-13).pdf”和“跟我学Spring3(1-7).pdf”,全面覆盖了Spring框架的核心概念和技术。Spring作为Java开发中的主流框架,...

    spring与JDBC集成Demo

    这个“spring与JDBC集成Demo”是一个典型的示例,旨在帮助初学者理解和实践 Spring 如何与 JDBC 结合使用。 在 Spring 中,JDBC 集成主要包括以下几个关键知识点: 1. **JdbcTemplate**:这是 Spring 提供的一个...

    跟我学Spring3

    《跟我学Spring3》这本书是针对Java开发人员深入学习Spring框架第三版的一份教程。Spring作为Java企业级应用开发中的核心框架,它以其强大的功能、灵活性和模块化设计深受开发者喜爱。Spring3版本在前一版本基础上...

    Spring JDBC相关jar包:spring_jdbc_4.0.0.zip

    Spring JDBC模块的主要目标是减少对JDBC API的直接依赖,通过提供一种更加高级、易于使用的编程模型来简化数据库访问。在这个“spring_jdbc_4.0.0.zip”压缩包中,包含的是Spring JDBC 4.0.0版本的jar文件,即...

Global site tag (gtag.js) - Google Analytics