大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。
为什么要整合Hibernate? 1、使用Spring的IOC功能管理SessionFactory对象 LocalSessionFactoryBean 2、使用Spring管理Session对象 HibernateTemplate 3、使用Spring的功能实现声明式的事务管理
整合Hibernate的步骤: 1、配置SessionFactory(能够自己主动完毕) <bean id=”sessionFactory” class=”org.springframework.orm.hibernate3.LocalSessionFactoryBean”> <property name=”configLocation” value=”classpath:hibernate.cfg.xml”> </property> </bean>
2、配置HibernateTemplate,用于完毕数据操作 <bean id=”hibernateTemplete” class=”org.springframework.orm.hibernate3.HibernateTemplate”> <property name=”sessionFactory” ref=”sessionFactory”></property> </bean>
3、让Common继承HibernateDaoSupport类,该类提供了HibernateTemplate的getter和setter方法。
4、将hibernateTemplete注入到Common中 <bean id=”common” class=”com.aptech.common.Common”> <property name=”hibernateTemplate” ref=”hibernateTemplete”></property> </bean>
5、将Common的方法改动成hibernateTemplete的操作。 package com.aptech.common;
import java.sql.SQLException; import java.util.List;
import org.hibernate.HibernateException; import org.hibernate.Session; import org.springframework.dao.DataAccessException; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.aptech.exception.CommonException; import com.aptech.htm.HibernateSessionFactory; /** * 通用类,不再负责事务处理 * 目标对象 * @author 李赞红 * * @param <POJO> */ public class Common<POJO> extends HibernateDaoSupport implements ICommon<POJO> { public void insertObject(POJO pojo) throws CommonException { try { this.getHibernateTemplate().save(pojo); } catch (DataAccessException e) { e.printStackTrace(); throw new CommonException(e); } }
public void updateObject(POJO pojo) throws CommonException { try { this.getHibernateTemplate().update(pojo); } catch (DataAccessException e) { e.printStackTrace(); throw new CommonException(e); } }
public void deleteObject(Class theClass, long id) throws CommonException { try { Object obj = this.getHibernateTemplate().load(theClass, id); this.getHibernateTemplate().delete(obj); } catch (DataAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); throw new CommonException(e); } }
public POJO loadObject(Class theClass, long id) throws CommonException { try { Object obj = this.getHibernateTemplate().load(theClass, id); return (POJO) obj; } catch (DataAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); throw new CommonException(e); } }
public List queryObjects(final String hql) throws CommonException { class Hc implements HibernateCallback{ public Object doInHibernate(Session session) throws HibernateException, SQLException { return session.createQuery(hql).list(); } } try { return this.getHibernateTemplate().executeFind(new Hc()); } catch (DataAccessException e) { e.printStackTrace(); throw new CommonException(e); } }
public List queryObjects(Class theClazz) throws CommonException { return this.queryObjects(“from ” theClazz.getSimpleName()); } }
6、配置事务 <!– 事务管理器,相当于TransactionProxy,定义事务的开启、提交、回滚 –> <bean id=”htm” class=”org.springframework.orm.hibernate3.HibernateTransactionManager”> <property name=”sessionFactory”> <ref bean=”sessionFactory”/> </property> </bean> <bean id=”ti” class=”org.springframework.transaction.interceptor.TransactionInterceptor”> <property name=”transactionManager”> <ref bean=”htm”/> </property> <property name=”transactionAttributes”> <props> <!– key:方法名称 –> <prop key=”insert*”>PROPAGATION_REQUIRED</prop> <prop key=”update*”>PROPAGATION_REQUIRED</prop> <prop key=”delete*”>PROPAGATION_REQUIRED</prop> <prop key=”load*”>PROPAGATION_REQUIRED,readOnly</prop> <prop key=”query*”>PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean> <!– 自己主动代理,代理业务对象 –> <bean class=”org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator”> <property name=”beanNames”> <list> <value>common</value> </list> </property> <property name=”interceptorNames”> <list> <value>ti</value> </list> </property> </bean>
7、将common注入Dao <bean id=”baseDao” abstract=”true”> <property name=”common”> <ref bean=”common”/> </property> </bean> <bean id=”udao” class=”com.aptech.dao.impl.UserDao” parent=”baseDao”></bean> <bean id=”rdao” class=”com.aptech.dao.impl.RoleDao” parent=”baseDao”></bean>
8、将Dao注入Service <bean id=”grantService” class=”com.aptech.service.impl.GrantService”> <property name=”rdao” ref=”rdao”></property> <property name=”udao” ref=”udao”></property> </bean>
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/118379.html原文链接:https://javaforall.cn