文档章节

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

javaART
 javaART
发布于 2017/05/30 16:34
字数 538
阅读 7
收藏 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
粉丝 0
博文 35
码字总数 12391
作品 0
昆明
后端工程师
Spring4.X整合Hibernate

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

哎小艾
2017/10/22
0
0
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
jdbc-jdbcTemplate-hibernate-jpa-springDataJpa系列(一)

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

乒乓狂魔
2015/04/21
0
12
Spring3和hibernate4整合的一点小问题

其实这个问题在第一次使用hibernate4的时候就发现了,当时没怎么管,因为后来换用了mybatis。 现在又重新一个项目,用hibernate4来做,就出现了这个问题,鼓捣了很久,保存数据一直提示我的U...

十月阳光
2014/01/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Memcached启动参数详解

memcached -d -m 1024 -l 192.168.100.101 -p 11211 -P /tmp/memcached.pid -c 1024 -f 1.25 -n 80 -t 16 运行参数描述 -d:以守护(daemon)进程方式启动; -u:是运行Memcache的用户,例如 ......

月下狼
26分钟前
0
0
xgboost-kaggle

https://www.kaggle.com/dansbecker/xgboost This tutorial is part of the Learn Machine Learning series. In this step, you will learn how to build and optimize models with the powe......

tantexian
26分钟前
0
0
nginx学习八 代理服务

最常用的语法 proxy_pass Syntax: proxy_pass URL;Default: --Context:location.if in location,limit_exception 反向代理 例:/etc/nginx/conf.d/default.conf 反向代理(代理服务端)......

Romanceling
34分钟前
0
0
npm ERR! Unexpected end of JSON ...

npm install 报错: npm ERR! Unexpected end of JSON input while parsing near '..."^2.8.14"},"_hasShrin' npm ERR! A complete log of this run can be found in: ... 打开终端 命令: 第......

大_侠
38分钟前
0
0
Android中的设计模式之责任链模式

参考 《设计模式:可复用面向对象软件的基础 》5.1 Chain of responsibility 职责链 对象行为型模式 《Android源码设计模式解析与实战》第9章 使编程更有灵活性--责任链模式 意图 使多个对象...

newtrek
41分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部