Spring 与 Hibernate 的整合DaoImpl中Session如何获取
博客专区 > javaART 的博客 > 博客详情
Spring 与 Hibernate 的整合DaoImpl中Session如何获取
javaART 发表于9个月前
Spring 与 Hibernate 的整合DaoImpl中Session如何获取
  • 发表于 9个月前
  • 阅读 2
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

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

 

标签: Hibernate&&Spring
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 34
码字总数 12367
×
javaART
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: