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
文件中配置。