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=”org.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>
<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>
//在第一種方法的基礎上加上Hibernate的配置段就OK了。
<!—使用Hibernate的sessionFactoryà
<bean id=”sessionFactory” class=”org.springframework.orm.hibernate.LocalSessionFactoryBean”>
<property name=”dataSource”>
<ref local=”dataSources”>
</property>
<property name=”mappingResources”>
<list>
<value>com/demo/bo/Book.hbm.xml</value>
</list>
</property>
<property name=”hibernateProperties”>
<props>
<prop key=”hibernate.dialect”>
net.sf.hibernate.dialect.SQLServerDialect
</prop>
<prop key=”hibernate.show_sql”>
true
<prop>
</props>
</property>
</bean>
<!—設定transactionManagerà
<bean id=”transactionManager”
class=”org.springframework.jdbc.datasource.DataSourceTransactionManager”>
<property name=”sessionFactory”>
<ref bean=”sessionFactory”/>
</property>
</bean>
<!—示例中DAO-->
<bean id=”bookDAO” class=”com.demo.bo.BookDAO”>
<property name=”sessionFactory”>
<ref bean=” sessionFactory”/>
</property>
<property name=”transactionManager”>
<ref bean=”transactionManager”>
</property>
</bean>
</beans>
紅色部分顯示了不同之處,有三點:1)、加入了<bean id=”sessionFactory”>段,引入Hibernate的sessionFactory;2)事務處理的屬性由原來的dataSource變成了sessionFactory;3)DAO引用從原來的dataSource變成了sessionFactory。其實就是說,在原來的datasouce之上加了Hibernate這一層,來處理相應的數據訪問問題。因此在Spring中引入ORM是很容易的。
Book.hbm.xml和Book.java是通過工具互相生成的,在這里不展示代碼了,而Book就是一個POJO。
4、使用iBatis
配置文件
<?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>
//在第一種方法的基礎上加上iBatis的配置段就OK了。
<!—使用iBatis à
<bean id=”sqlMap” class=”org.springframework.orm.ibatis.SqlMapClientFactoryBean”>
<property name=”configLocation”>
<value>WEB/sqlMapConfig.xml</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.demo.bo.BookDAO”>
<property name=”dataSource”>
<ref bean=” dataSource”/>
</property>
<property name=”transactionManager”>
<ref bean=”transactionManager”>
</property>
<property name=”sqlMap”>
<ref bean=”sqlMap”/>
</property>
</bean>
</beans>
紅色部分顯示了不同之處,主要來看一下其與Hibernate的不同之處,1)同樣引入iBatis配置段,不過其mappingResources配置信息放在了sqlMapConfig.xml下,該文件放在WEB-INF下,示例代碼如下:
<sqlMapConfig>
<sqlMap resource=”com/demo/bo/Book.xml”>
</sqlMapConfig>
而這其中的Book.xml文件類似于Hibernate中的Book.hbm.xml。
2)事務處理配置段依然引用的是dataSource,而不是sqlMap。
3)在DAO配置段,引用dataSource的同時,又加入了sqlMap引用。
其PO對象——Book.java與Hibernate中相同。