Spring
的持久层封装
(零雨其蒙原创,转载请注明)
一、概述
(一)基本概念
1、数据访问的关键技术
我们可以将数据访问分为两个部分:一是获得数据源;二是进行数据库操作(增删改查)。
2、获得数据源的几种方法
因为只是为了记录一些关键的东西,以实用为主,因此没有过多的考虑措辞和学术上的严谨。这里指的是在Java中怎么能取得和数据源(
DataSource)的联系,方法主要有传统的在程序中硬编码和通过XML注入。Spring提供三种XML注入:(1)使用Spring自带的DriverManagerDataSource;(2)使用DBCP连接池(3)使用Tomcat提供的JNDI。其中(1)可以配合Hibernate、iBatis等ORM一起使用(在XML配置文档中加入相应的配置段)。
(二)框架图
|
|
(三)何时使用什么
现在大多数轻量级开发,都采用Hibernate作为持久层解决方案,因此可以作为首选。
二、详细
(一)数据源注入
1、使用Spring自带的DriverManagerDataSource
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!
—
设
定dataSource
à
<bean id=
”
dataSource
” class=”
org.springframework.jdbc.datasource.DriverManagerDataSource
”>
<!
—使用SQL Server
数
据
库
à
<property name=
”driverClassName”>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</property>
<property name=
”url”>
<value>jdbc:Microsoft:sqlserver://localhost:1433/stdb</value>
</property>
<property name=
”name”>
<value>admin</value>
</property>
<property name=
”msg”>
<value>admin</value>
</property>
</bean>
<!
—设定
transactionManager
à
<bean id=
”
transactionManager
”
class=
”
org.springframework.jdbc.datasource.DataSourceTransactionManager
”
>
<property name=
”
dataSource
”
>
<ref bean=
”
dataSource
”
/>
</property>
</bean>
<!—示例中DAO-->
<bean id=
”bookDAO” class=”com.bookDAO”>
<property name=
”dataSource”>
<ref bean=
”dataSource”/>
</property>
<property name=
”transactionManager”>
<ref bean=
”transactionManager”>
</property>
</bean>
</beans>
红色部分显示了所使用的类,就是用它来处理数据库连接。
2、使用DBCP连接池
要在Spring中使用DBCP连接池,需要引入spring-framework-2.0-ml\lob\jakarta-commons文件夹中的commons-collections.jar、commons-dbcp.jar和commons-pool.jar。
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!
—
设
定dataSource
à
<bean id=
”
dataSource
” class=”
org.apache.commons.dbcp.BasicDataSource
”>
<!
—使用SQL Server
数
据
库
à
<property name=
”driverClassName”>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</property>
<property name=
”url”>
<value>jdbc:Microsoft:sqlserver://localhost:1433/stdb</value>
</property>
<property name=
”name”>
<value>admin</value>
</property>
<property name=
”msg”>
<value>admin</value>
</property>
</bean>
<!
—设定
transactionManager
à
<bean id=
”
transactionManager
”
class=
”
org.springframework.jdbc.datasource.DataSourceTransactionManager
”
>
<property name=
”
dataSource
”
>
<ref bean=
”
dataSource
”
/>
</property>
</bean>
<!—示例中DAO-->
<bean id=
”bookDAO” class=”com.bookDAO”>
<property name=
”dataSource”>
<ref bean=
”dataSource”/>
</property>
<property name=
”transactionManager”>
<ref bean=
”transactionManager”>
</property>
</bean>
</beans>
红色部分为不同之处,可以看出,Spring为各种不同的数据源提供了统一的方式,下面看使用Tomcat提供的JNDI,有了一些不同。
3、使用Tomcat提供的JNDI
分两步,第一步是配置Tomcat的server.xml;第二步是编写Spring的配置文件。
Tomcat
的server.xml
<Context path=”/demo” reloadable=”true” docBase=”c: \
eclipse
\workspace\demo
” workDir=” c: \
eclipse
\workspace\demo\
work”>
<
Resource
name=”jdbc/opendb” auth=”Container” type=”javax.sql.DataSource” factory=”org.apache.tomcat.dbcp.BasicDataSourceFactory” driverClassName=”com.microsoft.jdbc.sqlserver.SQLServerDriver” url=”jdbc:Microsoft:sqlserver://localhost:1433/stdb”
<!—
设定用户名-->
name=”admin”
<!—
设定密码
à
msg=”admin”
<
!--设定最大连接数
à
maxActive=”10000”
<
!--设定最大空闲时间
à
maxldle=”10000”
<
!--设定最大等待时间
à
maxWait=”10000”
removeAbandoned=”true”
removeAbandonedTimeout=”10”
logAbandoned=”true”
/>
</Context>
Spring
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!
—
设
定dataSource
à
<bean id=
”
dataSource
” class=”
o
rg.springframework.jndi.JndiObjectFactoryBean
>
<property name=”jndiName”>
<value>jdbc/opendb</value>
/*
以下信息在
server.xml
中已经配置过了,不需要再配置了
<!
—使用SQL Server
数
据
库
à
<property name=
”driverClassName”>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</property>
<property name=
”url”>
<value>jdbc:Microsoft:sqlserver://localhost:1433/stdb</value>
</property>
<property name=
”name”>
<value>admin</value>
</property>
<property name=
”msg”>
<value>admin</value>
</property>
*/
</bean>
<!
—设定
transactionManager
à
<bean id=
”
transactionManager
”
class=
”
org.springframework.jdbc.datasource.DataSourceTransactionManager
”
>
<property name=
”
dataSource
”
>
<ref bean=
”
dataSource
”
/>
</property>
</bean>
<!—示例中DAO-->
<bean id=
”bookDAO” class=”com.bookDAO”>
<property name=
”dataSource”>
<ref bean=
”dataSource”/>
</property>
<property name=
”transactionManager”>
<ref bean=
”transactionManager”>
</property>
</bean>
</beans>
红色部分为不同之处,可以看出,使用Tomcat提供的JNDI,有了一些不同。第一方式只是Spring包装了一下Jdbc,跟直接使用Jdbc没什么大的区别;后两种采用了连接池技术,比较好。我们也可以看出,三种方式配置基本相同,而作为使用数据源的类,调用方式相同,都是使用基本的依赖注入的方式。
4、使用Hibernate
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!
—
设
定dataSource
à
<bean id=
”
dataSource
” class=”org.springframework.jdbc.datasource.DriverManagerDataSource”>
<!
—使用SQL Server
数
据
库
à
<property name=
”driverClassName”>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</property>
&n