文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

【AI实战】手把手教你深度学习文字识别(文字检测篇:基于MSER, CTPN, SegLink, EAST等方法)

文字检测是文字识别过程中的一个非常重要的环节,文字检测的主要目标是将图片中的文字区域位置检测出来,以便于进行后面的文字识别,只有找到了文本所在区域,才能对其内容进行识别。 文字检...

雪饼
今天
15
0
思维导图XMind 8 Pro 绿化方法(附序列号)

按部就班: Step 1 -全新下载最新版本的 Xmind 8(注必须是英文官方的版本,中文代{过}{滤}理网站的版本修改过,无法使用pj); Step 2 -安装完毕后,点击文末的下载按钮下载pj补丁文件包,将...

一只小青蛙
今天
10
0
数据结构(ER数据库)设计规范

表命名规范 表命名的规则分为3个层级,层级之间通过_分割,例如b_r_identity、d_l_identity。规约为: [leavel]_[type]_[name] [leavel] 表示数据库表的层级和功能,分为: s:业务无关的系统...

随风溜达的向日葵
今天
10
0
阿里Sentinel控制台源码修改-对接Apollo规则持久化

https://github.com/alibaba/Sentinel/wiki/%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Sentinel 动态规则扩展 https://github.com/alibaba/Sentinel/wiki......

jxlgzwh
昨天
14
0
在Linux系统中创建SSH服务器别名

如果你经常通过 SSH 访问许多不同的远程系统,这个技巧将为你节省一些时间。你可以通过 SSH 为频繁访问的系统创建 SSH 别名,这样你就不必记住所有不同的用户名、主机名、SSH 端口号和 IP 地...

老孟的Linux私房菜
昨天
15
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部