10.3 DAO层实现
本系统的后台完全采用轻量级Java EE应用的架构,系统持久层访问使用DAO组件完成。DAO组件抽象出底层的数据访问,业务逻辑组件无须理会数据库访问的细节,只需专注于业务逻辑的实现即可。DAO 将数据访问集中在独立的一层,所有的数据访问都由DAO对象完成,从而使系统具有更好的可维护性。
DAO 组件还有助于提升系统的可移植性。独立的DAO层使得系统能在不同的数据库之间轻易切换,底层的数据库实现对于业务逻辑组件完全透明,移植数据库仅仅影响DAO层,切换不同的数据库不会影响业务逻辑组件,因此提高了系统的可移植性。
前面介绍的BaseDao接口、BaseDaoHibernate4接口可以极大地简化DAO组件的开发,因此本系统的DAO组件同样会继承BaseDao和BaseDaoHibernate4接口。
10.3.1 DAO的基础配置
对于BaseDaoHibernate4需要容器注入一个SessionFactory引用,该类也为依赖注入提供了setSessionFactory()方法。BaseDaoHibernate4 基类一旦获得SessionFactory 的引用,就可以完成大部分通用的增、删、改、查操作。
Spring为整合Hibernate提供了LocalSessionFactoryBean 类,这样可以将Hibernate 的SessionFactory纳入其IoC容器内。在使用LocalSessionFactoryBean配置SessionFactory之前,必须为其提供对应的数据源。SessionFactory的相关配置片段如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
   | <?xml version="1.0" encoding="utf-8"?>
  <beans xmlns="http://www.springframework.org/schema/beans" 	xmlns:p="http://www.springframework.org/schema/p" 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 	xsi:schemaLocation="http://www.springframework.org/schema/beans 	http://www.springframework.org/schema/beans/spring-beans.xsd"> 	 	 	 	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" 		p:driverClass="com.mysql.jdbc.Driver" 		p:jdbcUrl="jdbc:mysql://localhost:3306/auction" 		p:user="root" 		p:password="root" 		p:maxPoolSize="200" 		p:minPoolSize="2" 		p:initialPoolSize="2" 		p:maxIdleTime="2000" 		destroy-method="close"/> 	
  	<bean id="sessionFactory" 		class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" 		p:dataSource-ref="dataSource"> 		<property name="annotatedClasses"> 			<list> 				<value>org.crazyit.auction.domain.AuctionUser</value> 				<value>org.crazyit.auction.domain.Bid</value> 				<value>org.crazyit.auction.domain.Item</value> 				<value>org.crazyit.auction.domain.Kind</value> 				<value>org.crazyit.auction.domain.State</value> 			</list> 		</property> 		 		<property name="hibernateProperties"> 			<props> 				 				<prop key="hibernate.dialect"> 					org.hibernate.dialect.MySQL5InnoDBDialect</prop> 				 				<prop key="hibernate.show_sql">true</prop> 				 				<prop key="hibernate.format_sql">true</prop> 				<prop key="hibernate.hbm2ddl.auto">update</prop> 			</props> 		</property> 	</bean>
  	
  	<bean id="daoTemplate" 		abstract="true" 		p:sessionFactory-ref="sessionFactory" /> 	 	<bean id="stateDao" 		parent="daoTemplate" 		class="org.crazyit.auction.dao.impl.StateDaoHibernate" /> 	 	<bean id="kindDao" 		parent="daoTemplate" 		class="org.crazyit.auction.dao.impl.KindDaoHibernate" /> 	 	<bean id="auctionUserDao" 		parent="daoTemplate" 		class="org.crazyit.auction.dao.impl.AuctionUserDaoHibernate" /> 	 	<bean id="bidDao" 		parent="daoTemplate" 		class="org.crazyit.auction.dao.impl.BidDaoHibernate" /> 	 	<bean id="itemDao" 		parent="daoTemplate" 		class="org.crazyit.auction.dao.impl.ItemDaoHibernate" /> </beans>
   | 
 
可以将Hibernate属性直接放在LocalSessionFactoryBean内配置,也可以放在hibernate.cfg.xml文件中配置。
原文链接: 10.3 DAO层实现 10.3.1 DAO的基础配置