spring datasource jdbctemplate

来源:互联网 发布:js冲锋枪 编辑:程序博客网 时间:2024/06/06 20:01

<!-- 

Spring将数据访问过程中固定的和可变的部分明确划分为两个不同的类:模板(template)和回调(callback).

模板管理过程中固定的部分,而回调处理自定义的数据访问代码。

针对不同的持久化平台,Spring提供了多个可选模板。如果直接使用JDBC,可以选择JdbcTemplate。如果希望使用对象关系映射框架,则

HibernateTemplate或JpaTemplate可能更好。iBATIS的SqlMap客户端使用SqlMapClientTemplate

 

Dao支持类,基于模板-回调设计,Spring提供了Dao支持类,而将业务自己的Dao类作为它的子类。

当编写Dao实现时,可以继承自Dao支持类并调用模板获取方法来直接访问底层的数据访问模板。

如果需要访问底层的持久化平台,则每个Dao支持类都能够访问其与数据库进行通信的类。

 

Spring所支持的大多数持久化功能都依赖于数据源,因此需要先配置数据源。

1.通过JDBC驱动程序定义的数据源

2.通过JNDI查找的数据源

3.连接池的数据源

对于即将发布到生产环境中的应用程序,建议使用从连接池获取连接的数据源。如果可能的话,更倾向于通过应用服务器的JNDI来获取池中的数据源。

jndi-name:用于指定JNDI中资源的名称

如果应用程序运行在Java应用程序服务器中,则需要将resource-ref属性设置为true,这样给定的jndi-name将会自动添加java:comp/env/前缀

 

 -->

 <jee:jndi-lookup id="dataSource" jndi-name="/jdbc/SpitterDS" resource-ref="true"/>

 <!-- 

 如果不能从JNDI中查找数据源,那么就直接在spring中配置数据源连接池。Spring并没有提供数据源连接池的实现,但是使用DBCP是一个不错的选择。

DBCP包含多个提供连接池功能的数据源,其中BasicDataSource是最常用的,它在spring中易于配置,而且类似于spring自带的DriverManagerDataSource。

其中前四个属性是必须的:

1.driverClassName:JDBC驱动类的全限定类名

2.url:用于设置数据库的JDBC URL

3.username:数据库连接用户名

4。password:数据库连接密码

 BasicDataSource的池配置属性

 -------------------------------------------------------------------------------

       池配置属性  |所指定的内容

 -------------------------------------------------------------------------------

 initialSize  |池启动时创建的连接数量

 -------------------------------------------------------------------------------

 maxActive  |同一时间可以从池中分配的最多连接数,如果设置为0,则表示无限制

 -------------------------------------------------------------------------------

 maxIdle  |池里不会被释放的最多空闲连接数,如果设置为0,则表示无限制

 -------------------------------------------------------------------------------

 maxOpenPreparedStatements |在同时间能够从语句池中分配的预处理语句的最大数量。如果设置为0,则表示无限制

 -------------------------------------------------------------------------------

 maxWait  |在抛出异常之前,池等待连接回收的最大时间(当没有可用连接时)。如果设置为-1,则表示无限等待

 -------------------------------------------------------------------------------

 minEvictableIdleTimeMillis|连接在池中保持空闲而不被回收的最大时间

 -------------------------------------------------------------------------------

 minIdle  |在不创建新连接的情况下,池中保持空闲的最小连接数

 -------------------------------------------------------------------------------

 poolPreparedStatements  |是否对预处理语句进行池管理(布尔值)

 -------------------------------------------------------------------------------

 

  -->

  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

  <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>

  <property name="url" value="jdbc:hsqldb:hsql://localhost/spitter/spitter"/>

  <property name="username" value="sa"/>

  <property name="password" value=""/>

  <property name="initialSize" value="5"/>

  <property name="maxActive" value="10"/>

  </bean>

<!-- 

基于JDBC驱动的数据源

在Spring中,通过JDBC驱动定义数据源是最简单的配置方式。Spring提供了两种数据源供选择

1.DriverManagerDataSource:在每个连接请求时都会返回一个新建的连接,和上面说过的DBCP的BasicDataSource不同

      由DriverManagerDataSource提供的连接并没有进行池化管理。

2.SingleConnectionDataSource:在每个连接请求时都会返回同一个连接。尽管SingleConnectionDataSource不是

      严格意义上的连接池数据源,但是可以将其当作只有一个连接的池

 -->

  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

  <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>

  <property name="url" value="jdbc:hsqldb:hsql://localhost/spitter/spitter"/>

  <property name="username" value="sa"/>

  <property name="password" value=""/>

  </bean>

 <!-- 

 使用JDBC模板

 Spring为JDBC提供了3个模板类供使用

 1.JdbcTemplate:最基本的Spring JDBC模板,这个模板支持最简单的JDBC数据库访问功能以及简单的索引参数查询

 2.NamedParameterJdbcTemplate:使用该模板类执行查询语句,可以将查询值以命名参数的形式绑定到SQL中,而不是使用简单的索引参数

 3.SimpleJdbcTemplate:该模板类利用Java5的一些特性,

  -->

  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">

  <constructor-arg ref="dataSource"/>

  </bean>

  <!-- 还需要配置JdbcSpitterDao中的jdbcTemplate属性 -->

  <bean id="spitterDao" class="com.bean.SimpleJdbcTemplateSpitterDao">

  <property name="jdbcTemplate" ref="jdbcTemplate"/>

  </bean>

  <!-- 

  使用如上配置,在每个dao中都要设置一个属性及setter方法,如果dao有很多的话,就会有很多重复工作。

  这种情况下,一个解决方案是为所有的dao使用一个通用的父类。其中有SimpleJdbcTemplate属性。然后让所有的dao集成这个类并使用父类的SimpleJdbcTemplate进行数据访问

  可以继承SimpleJdbcDaoSupport来实现,但是在spring中配置dao时,和没有继承的dao无差别,所以要用另一种方案。

  直接将数据源配置给JdbcSpitterDao的dataSource属性,这个属性是继承自SimpleJdbcDaoSupport的。

   -->

   <bean id="spitterDao" class="com.bean.JdbcSpitterDao">

   <property name="dataSource" ref="dataSource"/>

   </bean>

 

0 0