Spring整合Hibernate的步骤

Spring整合Hibernate的步骤

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

为什么要整合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>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/118379.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • VS2013下串口数据char型转COleVariant问题[通俗易懂]

    VS2013下串口数据char型转COleVariant问题[通俗易懂]在串口需要发送一串字符数组buf[]时,COleVariant(buf)强制转换失效(在vc6.0环境中是允许的)。在VS2013环境下需要借助CByteArray类型进行中间的装换,实现代码如下:首先定义:CByteArraym_array;将char型数组中的数值赋值到m_array中 for(inti=0;im_array[i]=sbuf[i]; 

  • js特殊符号正则表达式_js正则表达式判断特殊字符

    js特殊符号正则表达式_js正则表达式判断特殊字符JavaScript正则表达式功能:搜索、替换、判断JavaScript正则表达式格式:/正则表达式主体/修饰符JavaScript正则表达式的修饰符:i:忽略大小写g:全局匹配m:多行匹配JavaScript中正则表达式应用场景:搜索功能(字符串方法)search()方法参数为字符串或者是正则表达式返回结果为匹配成功的索引值,如果没有,返回-1替换功能(字符串方法)r…

  • Telnet 1521端口连接失败问题,经过四天的努力终于解决!

    Telnet 1521端口连接失败问题,经过四天的努力终于解决!1由于安装oracle之后,安装plsql都是自动检测orcl实例的ip及其端口,最近突然发现plsql连不上,于是尝试telnet1521端口,于是发现端口连接失败的问题。经过几经摸索,解决了该问题。2注意:安装的oracle11g,12c版本时,listener.ora监听文件,没有自动添加红色圈里面的sid_name的设置,这点需要注意检查配置。  3环境变量配置,也很重要,这是…

  • 51单片机 堆栈与堆栈指针[通俗易懂]

    51单片机 堆栈与堆栈指针[通俗易懂]   堆栈是一种执行“先入后出”算法的数据结构。是在内存中的一个存储区域,数据一个一个顺序地存入(也就是“压入—PUSH”)这个区域之中。       有一个地址指针(堆栈指针)总指向最后一个压入堆栈的数据所在的存储单元,存放这个地址指针的寄存器就叫做堆栈指示器。       开始放入数据的单元叫做“栈底”。数据一个一个地存入,这个过程叫做“压栈”。读取这些数据时,按照堆栈指示器中…

    2022年10月22日
  • mysql 修改字段类型并设置默认值[通俗易懂]

    mysql 修改字段类型并设置默认值[通俗易懂]/*修改表obj_Device,把字段类型channelNum改为TINYINT(3),默认值为8*/altertable obj_DevicechangecolumnchannelNumchannelNumTINYINT(3)NOTNULLDEFAULT8;

  • Pytorch-DataLoader的使用

    Pytorch-DataLoader的使用原文连接:http://chenhao.space/post/d313d236.htmlpytorch-DataLoader的使用importtorchimporttorch.utils.dataasData#[1,1,1]相当于一句话的wordembedding,这个tensor中含有三句话x=torch.tensor([[1,1,1],[2,2,2…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号