Spring 与 Hibernate 的整合DaoImpl中Session如何获取
2017-05-30 00:00
501 查看
Dao层实现获取Session三个方法:
(1)继承HibernateDaoSupport类。this.getsession实际上是调用了父类HibernateDaoSupport中的方法获得session。使用spring管理hibernate的SessionFactory的时候,这个方法会从session池中拿出一session。这样做有可能有问题,尽管这种方式拿到的Session会自动关闭,但是[ a ]他是有一定的失效策略的,而且在超session池连接数的时候,spring无法自动的关闭这些session;[ b ]在Hibernate管理的类中使用Spring的类,使hibernate和Spring的耦合度变高。 注: 不推荐使用
例子:
(2)从spring管理的sessionFactory中创建一个绑定线程的session。Spring会根据该线程的执行情况来自动判断是关闭session还是延迟关闭。这样做可以避免手动的管理实务,同时一个线程最多开启和关闭一次session又可以提高程序的性能(),[解决了(1,3)中的问题]。 注:推荐使用
this.getHibernateTemplate().getSessionFactory().getCurrentSession();
例子:
(3)从spring管理的sessionFactory中创建一个session。此session不是线程绑定的。当执行完一个实务的时候自动关闭session。这种方法不用手动管理实务,但是同一个线程多次的开启和关闭session,浪费系统资源和影响执行效率,正常情况下还是不要用了,[从在(1)中的问题]。注: 不推荐使用
this.getHibernateTemplate().getSessionFactory().OpenSession。
例子:
(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(); } }
相关文章推荐
- spring中的HibernateDaoSupport的用法(Session是如何获取的)
- <?>关于spring里HibernateDaoSupport的关于session的获取方法
- hibernate使用spring的事务管理器在测试dao的时候获取不到session
- Hibernate和Spring整合时,获取Session失败
- Spring3与hibernate4整合,sessionFactory.getCurrentSession()方法获取不到Session对象异常解决办法
- spring在service层和dao层如何获取request和session
- Spring_SSH整合之_架构的历史(四层架构整合JSP+MySQL+JavaBean+Hibernate+Dao+Impl)_4
- spring2.5整合hibernate3.3的泛型Dao并加入spring jdbc的支持
- spring整合的项目中监听器Listener如何获取注入的bean(监听器获取Spring配置文件)
- 用代码讲废话之--细说如何整合spring+hibernate +jsf
- Spring整合hibernate(3)之基于HibernateDaoSupport的整合
- spring和hibernate整合使用getCurrentSession方法
- Hibernate整合进spring--使用hibernateTemplate.getSessionFactory().getCurrentSession()理解
- 自己动手写代码,整合Spring和Hibernate(三)之DAOSupport和DAOTemplate
- 由openSession、getCurrentSession和HibernateDaoSupport浅谈Spring对事物的支持
- Spring 整合HibernateDaoSupport(业务Dao继承CommonDaoImpl)
- Spring整合Hibernate,不用HibernateDaoSupport与HibernateTemplate而用Hibernate自己的api分析说明
- spring管理hibernate获取session方法
- SSH中将hibernate托管给spring获取session的方法
- Spring【整合DAO与Hibernate】