Spring
				
				
						的持久层封装
				
		
		
				(零雨其蒙原创,转载请注明)
		
		
				
						一、概述
				
		
		
				
						(一)基本概念
				
		
		
				
						1、数据访问的关键技术
				
		
		
				     我们可以将数据访问分为两个部分:一是获得数据源;二是进行数据库操作(增删改查)。
		
				
						2、获得数据源的几种方法
				
		
		因为只是为了记录一些关键的东西,以实用为主,因此没有过多的考虑措辞和学术上的严谨。这里指的是在Java中怎么能取得和数据源(DataSource)的联系,方法主要有传统的在程序中硬编码和通过XML注入。Spring提供三种XML注入:(1)使用Spring自带的DriverManagerDataSource;(2)使用DBCP连接池(3)使用Tomcat提供的JNDI。其中(1)可以配合Hibernate、iBatis等ORM一起使用(在XML配置文档中加入相应的配置段)。
		
				
						(二)框架图
				
		
		
				
						
								
										
												| 
																
																		
																				
																						| 
																										XML
																										注入数据源的三种方式
																								 |  
																						| 
																										Spring
																										自带的DriverManagerDataSource
																								 |  
																						| 
																										DBCP
																										连接池
																								 |  
																						| 
																										Tomcat
																										的JNDI
																								 |    | 
								
						
						
								
										
												| 
																
																		
																				
																						| 
																										数据库操作的两种方式
																								 |  
																						| 
																										Spring
																										的
																										JdbcTemplate
																								 |  
																						| 
																										使用
																										ORM
																										工具
																								 |    | 
								
						
				
		
		
				
						(三)何时使用什么
				
		
		
				          现在大多数轻量级开发,都采用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>
				
				
						        <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.Boo
						kDAO
						”>
				
				
						        <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.Boo
						kDAO
						”>
				
				
						        <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中相同。
		
				
						 (二)数据库操作
				
		
		
				
						1、使用JDBCTemplate
				
		
		 
		
				import javax.sql.DataSource;
				import org.springframework.jdbc.core.*;
				import org.springframework.transaction.*;
				import org.springframework.dao.*;
				 
				public class bookDAO{
				private DataSource dataSource依赖注入dataSource,管理数据库;//
				private PlatformTransationManager transactionManager;//依赖注入管理事务
				 
				public void setDataSource(DataSource dataSource){
				
						    this.dataSource=dataSource;
				
				}
				 
				
						     public void setTransactionManager(PlatformTransationManager transactionManager){
				
				
						         this. transactionManager= transactionManager;
				
				}
				 
				public int create(String msg){
				
						    JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
				
						    jdbcTemplate.update(“INSERT INFO book VALUES(1,’gf’,’Mastering 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.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>
						
						
								 
						
				
				
						
								   </bean> 
						
				
				
						
								   
						
						
								<!
						
						
								—声明式事务处理
						
						
								-
						
						
								à
						
				
				
						
								 
						
						 <bean id=
						”
						bookDAOProxy
						”
						 class=
						”
						org.springframework.transaction.interceptor.Transation.ProxyFactoryBean
						”
						>
				
				
						        <property name=
						”
						transacionManager
						”
						>
				
				
						            <ref bean=
						”
						transacionMaganer
						”
						/>
				
				
						        </property>
				
				
						<property name=
						”
						target
						”
						>
				
				
						            <ref bean=
						”
						bookDAO
						”
						/>
				
				
						        </property>
				
				
						<property name=
						”
						transactionAttributes
						”
						>
				
				
						            <props>
				
				
						               <!--
						表示对
						bookDAO
						中的
						create
						方法进行事务处理,并指明当前没有事务就新建一个(用
						PROPAGATION_REQUIRED
						常量来表示的)
						à
				
				
						                <prop key=
						”
						create*
						”
						>PROPAGATION_REQUIRED</prop>
				
				
						            </props>
				
				
						        </property> 
				
				
						   </bean>
				
				
						</beans>
				
		 
		 
		
				
						最简便、灵活的写法:
				
		
		 
		
				import javax.sql.DataSource;
				import org.springframework.jdbc.core.*;
				import org.springframework.transaction.*;
				import org.springframework.dao.*;
				 
				public class bookDAO{
				private DataSource dataSource依赖注入dataSource,管理数据库;//
				private PlatformTransationManager transactionManager;//依赖注入管理事务
				
						
								private String sql;
						
				
				 
				public void setDataSource(DataSource dataSource){
				
						    this.dataSource=dataSource;
				
				}
				 
				
						     public void setTransactionManager(PlatformTransationManager transactionManager){
				
				
						         this. transactionManager= transactionManager;
				
				}
				 
				
						
								public void setSql(String sql){
						
				
				
						
								     this.sql=sql;
						
				
				
						
								}
						
				
				 
				public int create(String msg){
				
						 /*
						
								①
						
						JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
				
				
						 
						 
						
								②
						
						 jdbcTemplate.update(
						“
						INSERT INFO book 
						VALUES(1,
						’gf’,’Mastering Spring’)”);
						*/
				
				
						//
						使用下述代码代替上面注释的内容
				
				
						
								   jdbcTemplate.update(this.sql);
						
				
				
						}
				
				}
		 
		配置文件
		
				
						<?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>
				
				
						
						 
				
						
								   <!—
						
						
								设定
						
						
								jdbcTemplate
						
						
								à
						
				
				
						
								    <bean id=”jdbcTemplate” class=”org.springframework.jdbc.core.JdbcTemplate”>
						
				
				
						
								        <property name=”dataSource”>
						
				
				
						
								               <ref bean=”dataSource”>
						
				
				
						
								        </property>
						
				
				
						   <!—示例中DAO-->
				  <bean id=”bookDAO” class=”com.bookDAO”>
				
						
								        <property name=
						
						
								”dataSource”>
						
				
				
						
								            <ref bean=
						
						
								”dataSource”/>
						
				
				
						
								        </property>
						
				
				
						
								     
						
						
								 //jdbcTemplate
						
						
								属性代替
						
						
								①
						
						
								处的代码将dataSource注入到jdbcTemplate中
						
				
				
						
								        <property name=”jdbcTemplate”>
						
				
				
						
								             <ref bean=”jdbcTemplate”>
						
				
				
						
								        </property>
						
				
				
						
								      
						
						
								//sql
						
						
								属性代替
						
						
								②
						
						
								处代码
						
				
				
						
								        <property name=”sql”>
						
				
				
						
								             <value>INSERT INTO hello VALUES(1,
						
						
								’
						
						
								gf
						
						
								’
						
						
								,
						
						
								’
						
						
								Mastering Spring
						
						
								’
						
						
								)</value> 
						
				
				
						
								         </property>
						
				
				
						
								   </bean> 
						
				
				
						
								   
						
						
								<!
						
						
								—声明式事务处理
						
						
								-
						
						
								à
						
				
				
						
								 
						
						 <bean id=
						”
						bookDAOProxy
						”
						 class=
						”
						org.springframework.transaction.interceptor.TransationProxyFactoryBean
						”
						>
				
				
						        <property name=
						”
						transacionManager
						”
						>
				
				
						            <ref bean=
						”
						transacionMaganer
						”
						/>
				
				
						        </property>
				
				
						<property name=
						”
						target
						”
						>
				
				
						            <ref bean=
						”
						bookDAO
						”
						/>
				
				
						        </property>
				
				
						<property name=
						”
						transactionAttributes
						”
						>
				
				
						            <props>
				
				
						               <!--
						表示对
						bookDAO
						中的
						create
						方法进行事务处理,并指明当前没有事务就新建一个(用
						PROPAGATION_REQUIRED
						常量来表示的)
						à
				
				
						                <prop key=
						”
						create*
						”
						>PROPAGATION_REQUIRED</prop>
				
				
						            </props>
				
				
						        </property> 
				
				
						   </bean>
				
				
						</beans>
				
		 
		 
		 
		
				
						2、使用Hibernate
				
		
		
				import javax.sql.DataSource;
				import org.springframework.jdbc.core.*;
				import org.springframework.transaction.*;
				import org.springframework.dao.*;
				import org.springframework.orm.*;
				 
				public class bookDAO{
				
						//private DataSource dataSource;
						依赖注入
						dataSource
						,管理数据库
				
				
						
								private SessionFactory sessionFactory;
						
				
				private PlatformTransationManager transactionManager;//依赖注入管理事务
				 
				
						/*public void setDataSource(DataSource dataSource){
				
				
						    this.dataSource=dataSource;
				
				
						}*/
				
				 
				
						     public void setTransactionManager(PlatformTransationManager transactionManager){
				
				
						         this. transactionManager= transactionManager;
				
				}
				 
				
						
								public void setSessionFactory(DataSource sessionFactory){
						
				
				
						
								     this. sessionFactory = sessionFactory;
						
				
				
						
								}
						
				
				 
				public int create(String msg){
				
						 /*
						
								①
						
						JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
				
				
						 
						 
						
								②
						
						 jdbcTemplate.update(
						“
						INSERT INFO book 
						VALUES(1,
						’gf’,’Mastering Spring’)”);
						*/
				
				
						 //
						下面这行替代
						
								①
						
				
				
						     
						
								 HibernateTemplate hibernateTemplate=new HibernateTemplate(sessionFactory);
						
				
				
						
								
								
						 
				
						
								      Book book=new Book();
						
				
				
						
								      book.setId(1);
						
				
				
						
								      book.setAuthor(“gf”);
						
				
				
						
								      book.setName(“Mastering Spring”);
						
				
				
						
								 
						
						//
						下面这行替代
						
								②
						
				
				
						
								      hibernateTemplate.saveOrUpdate(book);
						
				
				
						}
				
		 
		 
		
				
						sessionFactory
				里引入了book.hbm.xml
		 
		 
		
				
						3、使用iBatis
				
		
		
				import javax.sql.DataSource;
				import org.springframework.jdbc.core.*;
				import org.springframework.transaction.*;
				import org.springframework.dao.*;
				import org.springframework.orm.*;
				 
				public class bookDAO extends SqlMapClientDaoSupport{
				
						     private PlatformTransationManager transactionManager;
				
				 
				
						 
						    public void setTransactionManager(PlatformTransationManager transactionManager){
				
				
						         this. transactionManager= transactionManager;
				
				}
				 
				public int create(String msg){
				
						      
						
								Book book=new Book();
						
				
				
						
								      book.setId(1);
						
				
				
						
								      book.setAuthor(“gf”);
						
				
				
						
								      book.setName(“Mastering Spring”);
						
				
				
						   
				
				
						
								     getSqlMapClientTemplate().update(“
						
						
								insertBook
						
						
								”,book);
						
				
				}
				 
				}
		 
		 
		
				配置文件——Book.xml
		
		该文件相当于Hibernate中的book.hbm.xml
		 
		
				<sqlMap namespace=”Book”>
				<typeAlias alias=”book” type=”com.demo.bo.Book”/>
				<insert id=”insertBook” parameterClass=”book”>
				
						    insert into book(id,author,name) values(#id#,#author#,#name#);
				
				</insert>
				</sqlMap>
		 
		BookDAO中的insertBook和配置文件中的insertBook相匹配。