文档章节

Spring 与 Hibernate 的整合DaoImpl中Session如何获取

javaART
 javaART
发布于 2017/05/30 16:34
字数 538
阅读 15
收藏 0

Dao层实现获取Session三个方法:

(1)继承HibernateDaoSupport类。this.getsession实际上是调用了父类HibernateDaoSupport中的方法获得session。使用spring管理hibernate的SessionFactory的时候,这个方法会从session池中拿出一session。这样做有可能有问题,尽管这种方式拿到的Session会自动关闭,但是[ a ]他是有一定的失效策略的,而且在超session池连接数的时候,spring无法自动的关闭这些session;[ b ]在Hibernate管理的类中使用Spring的类,使hibernate和Spring的耦合度变高。 注: 不推荐使用

例子:

public class PersonDAOHibernate extends HibernateDaoSupport implements PersonDAO
{

   //返回全部的人的实例
    public List getPersons()
    {       
          //通过HibernateTemplate的find方法返回Person的全部实例
           return getHibernateTemplate().find("from Person");
    }


   //删除Person实例的主键
    public void removePerson(int personid)
    {
          //先加载特定实例
           Object p = getHibernateTemplate().load(Person.class, new Integer(personid));

          //删除特定实例
           getHibernateTemplate().delete(p);
    }

}

(2)从spring管理的sessionFactory中创建一个绑定线程的session。Spring会根据该线程的执行情况来自动判断是关闭session还是延迟关闭。这样做可以避免手动的管理实务,同时一个线程最多开启和关闭一次session又可以提高程序的性能(),[解决了(1,3)中的问题] 注:推荐使用

this.getHibernateTemplate().getSessionFactory().getCurrentSession();

例子:

public class PersonDAOHibernate implements PersonDAO
{
  private SessionFactory sessionfactory;

  //线程绑定获取session
  private Session getSession()
  {
     return sessionfactory.getCurrentSession();
  }

   //返回全部的人的实例
  public List getPersons()
   {       
      String sql = "";
      sql = "from User user where user.userId not in ("+userIds+") order by user.createTime desc";	

      Query query = getSession().createQuery(sql);
      return query.list();
    }
}

(3)从spring管理的sessionFactory中创建一个session。此session不是线程绑定的。当执行完一个实务的时候自动关闭session。这种方法不用手动管理实务,但是同一个线程多次的开启和关闭session,浪费系统资源和影响执行效率,正常情况下还是不要用了,[从在(1)中的问题]注: 不推荐使用

this.getHibernateTemplate().getSessionFactory().OpenSession。

例子:

public class PersonDAOHibernate implements PersonDAO
{
   public List getPersons()
  {
     String sql = "";
     sql = "from User user where user.userId not in ("+userIds+") order by user.createTime desc";	

     Session session=this.getHibernateTemplate().getSessionFactory().openSession();

     Query query = session.createQuery(sql);
     return query.list();
  }
}

 

© 著作权归作者所有

共有 人打赏支持
javaART
粉丝 1
博文 36
码字总数 12872
作品 0
昆明
后端工程师
私信 提问
Spring4.X整合Hibernate

1、Spring整合Hibernate,整合什么? ① 由Spring的IOC容器管理Hibernate的SessionFactory ② 让Hibernate使用上Spring的声明式事务 2、整合步骤 ① 加入Hibernate i、jar包 ii、添加hiberna...

哎小艾
2017/10/22
0
0
jdbc-jdbcTemplate-hibernate-jpa-springDataJpa系列(一)

1 需要解决的疑惑 目前jdbc、jdbcTemplate、hibernate、jpa、spring之间有或多或少的关系。在使用它们的时候有着各种各样的配置,初学者很容易分不清到底各自都做了什么事情,如果对自己要求...

乒乓狂魔
2015/04/21
0
12
eclipse下搭建SSH整合环境(Struts2+Spring+Hibernate+maven)

1,创建一个maven工程,在选择Archetype时选择webapp: 2,下一步配置maven的pom.xml文件,获取依赖的jar包: <!-- struts2核心包 --><dependency> </dependency> <!-- struts2与spring整合的......

徐航
2014/05/08
0
5
整合hibernate4到spring4mvc框架

1.总体设计思路 写一个HibernateDao的公共接口HibernateCommonDao,实现基本的增删改查HibernateCommonDaoImpl,所有的具体业务类DaoImpl都继承自HibernateCommonDaoImpl并且implements它自己...

阿宇_
2015/09/15
617
0
Spring4 hibernate5整合 事务管理问题

applicationContext.xml: DaoImpl: package com.company.SH.dao.Impl; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.beans.factory.ann......

rickbpoy
2017/05/31
254
4

没有更多内容

加载失败,请刷新页面

加载更多

Spring Batch @SpringBatchTest 注解

Spring Batch 提供了一些非常有用的工具类(例如 JobLauncherTestUtils 和 JobRepositoryTestUtils)和测试执行监听器(StepScopeTestExecutionListener 和 JobScopeTestExecutionListener)......

honeymose
29分钟前
3
0
浏览器缓存

HTTP缓存类型 200 from cache:直接从本地缓存获取响应,可细分为from disk cache, from memory cache 304 Not Modified:协商缓存,本地未命中发送校验数据到服务端,如果服务端数据没有改变,则读...

关元
42分钟前
3
0
正则表达式简单使用说明

在Python3里确实简单明了,测试样例如下 # 正则content = 'Hello 1234567 World_This is a Regex Demo'# 贪婪匹配 尽可能多的匹配result = re.match('^He.*(\d+).*Demo$', co......

轻轻的往前走
44分钟前
2
0
多线程创建方式

一、基本概念 进程:就是正在运行的应用程序,进程是线程的集合。 线程:就是进程中的一条执行路径,一个独立的执行单元。 多线程:就是为了提高程序的效率,使用多线程,每个线程互不影响,...

秋至丶枫以落
48分钟前
2
0
聊聊flink的Async I/O

序 本文主要研究一下flink的Async I/O 实例 // This example implements the asynchronous request and callback with Futures that have the// interface of Java 8's futures (which is t......

go4it
56分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部