3Hibernate支持介绍
Spring的LocalSessionFactoryBean的简化配置:
使用HibernateTemplate或者使用HibernateDaoSupport:
当然我们使用HibernateDaoSupport的时候,需要sessionFactory的注入,那么就可以先定义一个HibernateDaoSupport的抽象Spring bean,然后让继承HibernateDaoSupport的bean定义一个parent:
这样做的好处在于helloHibernate可以省略下面两个东西:
4在企业级应用程序中使用Hibernate
1、阻止更新脏数据
参照《hibernate 控制并发访问》http://blog.csdn.net/partner4java/article/details/6926546
2、对象等价性
当我们在Hibernate中使用持久化集合时,比如set。那么就需要考虑等价性。实现自然等价或者数据库等价。
主要是根据业务需求重载hashcode和equals
3、事务支持
使耽搁DAO方法具有事务性不是一个好的实战,因为他讲在服务层智商定义事务的边界。DAO层应该是一个域对象和一些数据存储方式间的简单转换器。
配置文件,添加事务支持:
4、延迟加载
只是在需要的时候抓取数据。
Spring的LocalSessionFactoryBean的简化配置:
- <context:property-placeholder location="classpath:jdbc.properties" />
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
- destroy-method="close">
- <property name="driverClassName" value="${driverClassName}"/>
- <property name="url" value="${url}"/>
- <property name="username" value="${username}"/>
- <property name="password" value="${password}"/>
- <property name="initialSize" value="${initialSize}"/>
- <property name="maxActive" value="${maxActive}"/>
- <property name="maxIdle" value="${maxIdle}"/>
- <property name="minIdle" value="${minIdle}"/>
- <property name="maxWait" value="${maxWait}"/>
- <property name="defaultAutoCommit" value="${defaultAutoCommit}"/>
- </bean>
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
- <property name="dataSource" ref="dataSource"></property>
- </bean>
使用HibernateTemplate或者使用HibernateDaoSupport:
当然我们使用HibernateDaoSupport的时候,需要sessionFactory的注入,那么就可以先定义一个HibernateDaoSupport的抽象Spring bean,然后让继承HibernateDaoSupport的bean定义一个parent:
- ....
- <bean id="hibernateDaoSupport" abstract="true" class="org.springframework.orm.hibernate3.support.HibernateDaoSupport">
- <property name="sessionFactory" ref="sessionFactory"/>
- </bean>
- <bean id="helloHibernate" class="...." parent="hibernateDaoSupport"/>
- ....
这样做的好处在于helloHibernate可以省略下面两个东西:
- <property name="dataSource" ref="dataSource"></property>
- <property name="hibernateTemplate" ref="hibernateTemplate"></property>
4在企业级应用程序中使用Hibernate
1、阻止更新脏数据
参照《hibernate 控制并发访问》http://blog.csdn.net/partner4java/article/details/6926546
2、对象等价性
当我们在Hibernate中使用持久化集合时,比如set。那么就需要考虑等价性。实现自然等价或者数据库等价。
主要是根据业务需求重载hashcode和equals
3、事务支持
使耽搁DAO方法具有事务性不是一个好的实战,因为他讲在服务层智商定义事务的边界。DAO层应该是一个域对象和一些数据存储方式间的简单转换器。
配置文件,添加事务支持:
- <context:property-placeholder location="classpath:jdbc.properties" />
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
- destroy-method="close">
- <property name="driverClassName" value="${driverClassName}"/>
- <property name="url" value="${url}"/>
- <property name="username" value="${username}"/>
- <property name="password" value="${password}"/>
- <property name="initialSize" value="${initialSize}"/>
- <property name="maxActive" value="${maxActive}"/>
- <property name="maxIdle" value="${maxIdle}"/>
- <property name="minIdle" value="${minIdle}"/>
- <property name="maxWait" value="${maxWait}"/>
- <property name="defaultAutoCommit" value="${defaultAutoCommit}"/>
- </bean>
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
- <property name="dataSource" ref="dataSource"></property>
- </bean>
- <bean id="transactionManager"
- class="org.springframework.orm.hibernate3.HibernateTransactionManager">
- <property name="sessionFactory" ref="sessionFactory"></property>
- </bean>
- <!-- 事务通知 -->
- <tx:advice id="txAdvice" transaction-manager="transactionManager">
- <tx:attributes>
- <tx:method name="new*" propagation="REQUIRED" isolation="DEFAULT" />
- <tx:method name="save*" propagation="REQUIRED" isolation="DEFAULT" />
- <tx:method name="update*" propagation="REQUIRED" isolation="DEFAULT" />
- <tx:method name="delete*" propagation="REQUIRED" isolation="DEFAULT" />
- <tx:method name="bulk*" propagation="REQUIRED" isolation="DEFAULT" />
- <tx:method name="load*" propagation="REQUIRED" isolation="DEFAULT" read-only="true"/>
- <tx:method name="get*" propagation="REQUIRED" isolation="DEFAULT" read-only="true"/>
- <tx:method name="query*" propagation="REQUIRED" isolation="DEFAULT" read-only="true"/>
- <tx:method name="find*" propagation="REQUIRED" isolation="DEFAULT" read-only="true"/>
- <tx:method name="is*" propagation="REQUIRED" isolation="DEFAULT" read-only="true"/>
- <tx:method name="*" propagation="SUPPORTS" isolation="DEFAULT" />
- </tx:attributes>
- </tx:advice>
- <aop:config>
- <aop:advisor pointcut="execution(* *..*Service*.*(..))" advice-ref="txAdvice" />
- </aop:config>
4、延迟加载
只是在需要的时候抓取数据。