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

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();
  }
}

 

转载于:https://my.oschina.net/u/2937897/blog/911342

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值