`
hxzon
  • 浏览: 17897 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring封装Hibernate

阅读更多
Spring封装Hibernate
 
public Object execute(HibernateCallback action) throws DataAccessException {
  return execute(action, isExposeNativeSession());
 }

 public List executeFind(HibernateCallback action) throws DataAccessException {
  Object result = execute(action, isExposeNativeSession());
  if (result != null && !(result instanceof List)) {
   throw new InvalidDataAccessApiUsageException(
     "Result object returned from HibernateCallback isn't a List: [" + result + "]");
  }
  return (List) result;
 }

 public Object execute(HibernateCallback action, boolean exposeNativeSession) throws DataAccessException {
  Assert.notNull(action, "Callback object must not be null");

  Session session = getSession();
  boolean existingTransaction = SessionFactoryUtils.isSessionTransactional(session, getSessionFactory());
  if (existingTransaction) {
   logger.debug("Found thread-bound Session for HibernateTemplate");
  }

  FlushMode previousFlushMode = null;
  try {
   previousFlushMode = applyFlushMode(session, existingTransaction);
   Session sessionToExpose = (exposeNativeSession ? session : createSessionProxy(session));
   Object result = action.doInHibernate(sessionToExpose);
   flushIfNecessary(session, existingTransaction);
   return result;
  }
  catch (HibernateException ex) {
   throw convertHibernateAccessException(ex);
  }
  catch (SQLException ex) {
   throw convertJdbcAccessException(ex);
  }
  catch (RuntimeException ex) {
   // Callback code threw application exception...
   throw ex;
  }
  finally {
   if (existingTransaction) {
    logger.debug("Not closing pre-bound Hibernate Session after HibernateTemplate");
    if (previousFlushMode != null) {
     session.setFlushMode(previousFlushMode);
    }
   }
   else {
    // Never use deferred close for an explicitly new Session.
    if (isAlwaysUseNewSession()) {
     SessionFactoryUtils.closeSession(session);
    }
    else {
     SessionFactoryUtils.closeSessionOrRegisterDeferredClose(session, getSessionFactory());
    }
   }
  }
 }


-----------------------------

public void update(Object entity) throws DataAccessException {
  update(entity, null);
 }

 public void update(final Object entity, final LockMode lockMode) throws DataAccessException {
  execute(new HibernateCallback() {
   public Object doInHibernate(Session session) throws HibernateException {
    checkWriteOperationAllowed(session);
    session.update(entity);
    if (lockMode != null) {
     session.lock(entity, lockMode);
    }
    return null;
   }
  }, true);
 }

 public void saveOrUpdate(final Object entity) throws DataAccessException {
  execute(new HibernateCallback() {
   public Object doInHibernate(Session session) throws HibernateException {
    checkWriteOperationAllowed(session);
    session.saveOrUpdate(entity);
    return null;
   }
  }, true);
 }

 public void saveOrUpdateAll(final Collection entities) throws DataAccessException {
  execute(new HibernateCallback() {
   public Object doInHibernate(Session session) throws HibernateException {
    checkWriteOperationAllowed(session);
    for (Iterator it = entities.iterator(); it.hasNext();) {
     session.saveOrUpdate(it.next());
    }
    return null;
   }
  }, true);
 }

 public Object saveOrUpdateCopy(final Object entity) throws DataAccessException {
  return execute(new HibernateCallback() {
   public Object doInHibernate(Session session) throws HibernateException {
    checkWriteOperationAllowed(session);
    return session.saveOrUpdateCopy(entity);
   }
  }, true);
 }

-------------------------

 public List find(final String queryString, final Object[] values, final Type[] types)
   throws DataAccessException {

  if (values != null && types != null && values.length != types.length) {
   throw new IllegalArgumentException("Length of values array must match length of types array");
  }
  return (List) execute(new HibernateCallback() {
   public Object doInHibernate(Session session) throws HibernateException {
    Query queryObject = session.createQuery(queryString);
    prepareQuery(queryObject);
    if (values != null) {
     for (int i = 0; i < values.length; i++) {
      if (types != null && types[i] != null) {
       queryObject.setParameter(i, values[i], types[i]);
      }
      else {
       queryObject.setParameter(i, values[i]);
      }
     }
    }
    return queryObject.list();
   }
  }, true);
 }

----------------------------

 public List findByNamedParam(
     final String queryString, final String[] paramNames, final Object[] values, final Type[] types)
     throws DataAccessException {

  if (paramNames.length != values.length) {
   throw new IllegalArgumentException("Length of paramNames array must match length of values array");
  }
  if (types != null && paramNames.length != types.length) {
   throw new IllegalArgumentException("Length of paramNames array must match length of types array");
  }
  return (List) execute(new HibernateCallback() {
   public Object doInHibernate(Session session) throws HibernateException {
    Query queryObject = session.createQuery(queryString);
    prepareQuery(queryObject);
    if (values != null) {
     for (int i = 0; i < values.length; i++) {
      applyNamedParameterToQuery(queryObject, paramNames[i], values[i], (types != null ? types[i] : null));
     }
    }
    return queryObject.list();
   }
  }, true);
 }

 public List findByValueBean(final String queryString, final Object valueBean)
   throws DataAccessException {

  return (List) execute(new HibernateCallback() {
   public Object doInHibernate(Session session) throws HibernateException {
    Query queryObject = session.createQuery(queryString);
    prepareQuery(queryObject);
    queryObject.setProperties(valueBean);
    return queryObject.list();
   }
  }, true);
 }

----------------------

 public List findByNamedQuery(final String queryName, final Object[] values, final Type[] types)
   throws DataAccessException {

  if (values != null && types != null && values.length != types.length) {
   throw new IllegalArgumentException("Length of values array must match length of types array");
  }
  return (List) execute(new HibernateCallback() {
   public Object doInHibernate(Session session) throws HibernateException {
    Query queryObject = session.getNamedQuery(queryName);
    prepareQuery(queryObject);
    if (values != null) {
     for (int i = 0; i < values.length; i++) {
      if (types != null && types[i] != null) {
       queryObject.setParameter(i, values[i], types[i]);
      }
      else {
       queryObject.setParameter(i, values[i]);
      }
     }
    }
    return queryObject.list();
   }
  }, true);
 }

------------------------

 public List findByNamedQueryAndNamedParam(
     final String queryName, final String[] paramNames, final Object[] values, final Type[] types)
     throws DataAccessException {

  if (paramNames != null && values != null && paramNames.length != values.length) {
   throw new IllegalArgumentException("Length of paramNames array must match length of values array");
  }
  if (values != null && types != null && paramNames.length != types.length) {
   throw new IllegalArgumentException("Length of paramNames array must match length of types array");
  }
  return (List) execute(new HibernateCallback() {
   public Object doInHibernate(Session session) throws HibernateException {
    Query queryObject = session.getNamedQuery(queryName);
    prepareQuery(queryObject);
    if (values != null) {
     for (int i = 0; i < values.length; i++) {
      applyNamedParameterToQuery(queryObject, paramNames[i], values[i], (types != null ? types[i] : null));
     }
    }
    return queryObject.list();
   }
  }, true);
 }

 public List findByNamedQueryAndValueBean(final String queryName, final Object valueBean)
   throws DataAccessException {

  return (List) execute(new HibernateCallback() {
   public Object doInHibernate(Session session) throws HibernateException {
    Query queryObject = session.getNamedQuery(queryName);
    prepareQuery(queryObject);
    queryObject.setProperties(valueBean);
    return queryObject.list();
   }
  }, true);
 }

-------------------

 protected void prepareQuery(Query queryObject) {
  if (isCacheQueries()) {
   queryObject.setCacheable(true);
   if (getQueryCacheRegion() != null) {
    queryObject.setCacheRegion(getQueryCacheRegion());
   }
  }
  if (getFetchSize() > 0) {
   queryObject.setFetchSize(getFetchSize());
  }
  if (getMaxResults() > 0) {
   queryObject.setMaxResults(getMaxResults());
  }
  SessionFactoryUtils.applyTransactionTimeout(queryObject, getSessionFactory());
 }

 protected void prepareCriteria(Criteria criteria) {
  if (isCacheQueries()) {
   criteria.setCacheable(true);
   if (getQueryCacheRegion() != null) {
    criteria.setCacheRegion(getQueryCacheRegion());
   }
  }
  if (getFetchSize() > 0) {
   criteria.setFetchSize(getFetchSize());
  }
  if (getMaxResults() > 0) {
   criteria.setMaxResults(getMaxResults());
  }
  SessionFactoryUtils.applyTransactionTimeout(criteria, getSessionFactory());
 }

-----------------------


 protected void applyNamedParameterToQuery(Query queryObject, String paramName, Object value, Type type)
   throws HibernateException {

  if (value instanceof Collection) {
   if (type != null) {
    queryObject.setParameterList(paramName, (Collection) value, type);
   }
   else {
    queryObject.setParameterList(paramName, (Collection) value);
   }
  }
  else if (value instanceof Object[]) {
   if (type != null) {
    queryObject.setParameterList(paramName, (Object[]) value, type);
   }
   else {
    queryObject.setParameterList(paramName, (Object[]) value);
   }
  }
  else {
   if (type != null) {
    queryObject.setParameter(paramName, value, type);
   }
   else {
    queryObject.setParameter(paramName, value);
   }
  }
 }

 

 
分享到:
评论

相关推荐

    Spring与Hibernate集成

    它封装了常见的Hibernate操作,如保存、更新、删除和查询。在Spring配置文件中,我们可以定义一个`HibernateTemplate`bean,并将其与SessionFactory关联。 4. **定义DAO层**: 数据访问对象(DAO)层负责与数据库的...

    springmvc+spring+hibernate

    Spring MVC、Spring 和 Hibernate 是Java Web开发中的三大主流框架,它们各司其职,共同构建了一个强大而灵活的后端架构。Spring MVC 负责处理HTTP请求并将其路由到相应的控制器,Spring 提供了依赖注入(DI)和面向...

    第24次课-1 Spring与Hibernate的整合

    开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,解决了Spring封装Hibernate后灵活性不足的缺陷。 24.3 Spring对Hibernate的简化 24.3.4 HibernateTemplate的复杂用法 ...

    非注解Springmvc+spring+hibernate 入门实例

    SpringMVC作为Spring的一部分,专门用于处理Web层的请求,而Hibernate则是一个强大的对象关系映射(ORM)框架,简化了数据库操作。下面我们将深入探讨"非注解SpringMVC+Spring+Hibernate入门实例"中的关键知识点。 ...

    spring+hibernate,自己封装了原生sql的处理,模仿mybatis使用

    在IT行业中,Spring和Hibernate是两个非常重要的框架,它们分别专注于不同的领域。Spring是一个全面的后端开发框架,提供依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,使得Java应用的构建变得...

    Spring整合Hibernate.jar

    HibernateTemplate封装了一些常用的Hibernate操作,如save、update、delete、find等。 6. **注解驱动的实体类和映射**:Hibernate支持使用注解来定义实体类和数据库表之间的映射。例如,使用`@Entity`标记实体类,`...

    Spring集成Hibernate myeclipse 下

    在IT行业中,Spring和Hibernate是两个非常重要的框架,它们分别在应用层和数据持久化层发挥着关键作用。Spring是一个全面的Java企业级应用开发框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)...

    spring_hibernate整合实例

    5. **DAO(数据访问对象)和Service层**:Spring可以帮助我们创建DAO和Service层,其中DAO层负责具体的数据操作,而Service层则封装业务逻辑,两者之间通过依赖注入进行通信。 整合步骤大致如下: 1. **配置...

    Spring+Hibernate+Strust 整合开发步骤

    在Java企业级应用开发中,Spring、Hibernate和Struts是三个非常重要的框架,它们分别负责控制层、持久层和视图层的管理。这三种框架的整合能够提供一个高效、松耦合的开发环境。以下是对Spring、Hibernate、Struts...

    webservice提供数据访问spring+hibernate

    5. **定义Service层**:创建业务服务接口和实现,使用Spring的@Autowired注解注入DAO,封装业务逻辑。 6. **创建Web服务**:使用CXF生成Web服务接口和实现,将Service层作为服务的业务逻辑。可以通过JAX-WS或JAX-RS...

    Struts+Spring+Hibernate开发实例.pdf

    标题和描述中指出的文档《Struts+Spring+Hibernate开发实例.pdf》包含了关于这三个流行的Java开源框架结合使用的示例代码和相关知识点。Struts负责视图与控制器部分,Spring负责业务逻辑层及依赖注入,Hibernate负责...

    Spring,Hibernate整合源码

    6. **Query的创建和执行**:Spring允许在Service层使用Criteria API或HQL构建动态查询,这可以更好地封装和解耦查询逻辑。 7. **AOP整合**:Spring的AOP可以用于日志记录、性能监控、缓存管理等,与Hibernate的查询...

    spring hibernate ext项目

    2. 工具类和实用方法:可能提供了对Spring和Hibernate常用操作的封装,提高开发效率。 3. 模块化设计:可能将不同的功能模块化,便于代码重用和维护。 4. 性能优化:可能包含了针对Spring和Hibernate的性能调优策略...

    JSF+Spring+Hibernate的实例讲解.doc

    在 JCatalog 示例中,Spring 可能用于实现业务服务接口,提供对 Hibernate DAO 的封装,而 JSF 的 Managed Beans 作为视图与控制器的结合,负责处理用户请求并调用 Spring 服务。此外,安全控制也应纳入设计考虑,如...

    Struts2,Spring与Hibernate整合应用,学生成绩管理系统

    - **AOP(面向切面编程)**:Spring AOP允许开发者定义“切面”来封装那些跨多模块的功能,如日志记录、安全控制等,从而提高代码的复用性和可维护性。 - **事务管理**:Spring提供了一套强大的事务管理机制,能够...

    访问数据库基本封装(spring/hibernate/ibatis)

    本篇文章将深入探讨三个流行的Java框架:Spring、Hibernate和iBatis,它们都提供了对数据库操作的高效封装,使得开发人员能够更便捷地处理数据库事务。 首先,Spring框架以其强大的依赖注入和面向切面编程闻名,它...

    Spring2 Hibernate3集成

    ### Spring2 Hibernate3集成知识点详解 #### 一、Spring与Hibernate简介 - **Spring框架**:作为一款轻量级的Java开发框架,Spring的核心特性包括依赖注入(DI)和面向切面编程(AOP),这使得它在企业级应用开发...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    12.6.16 编写Spring和Hibernate的配置文件spring-config.xml 12.6.17 编写web.xml 12.6.18 验证示例 12.7 小结 第四篇 J2EE项目案例精选 第十三章 网上调查系统 13.1 系统概述 13.2 需求分析 13.2.1 系统用例图 ...

    Spring Struts Hibernate的简介

    SSH(Struts + Spring + Hibernate)是一种常见的Java Web开发框架组合,用于构建高效、可维护的Web应用。这三种框架分别负责不同的职责,协同工作以实现模型-视图-控制器(MVC)设计模式。 1. **Struts**: - ...

Global site tag (gtag.js) - Google Analytics