zoukankan      html  css  js  c++  java
  • HttpSession与Hibernate中Session的区别

    HttpSession与Hibernate中Session的区别  

     
    一、javax.servlet.http.HttpSession是一个抽象接口
     
    它的产生:J2EE的Web程序在运行的时候,会给每一个新的访问者建立一个HttpSession,这个Session是用户身份的唯一表示。注意,是容器(Tomcat,Resin)自动创建的。
     
    用途:存放这个用户的一些经常被用到的信息,例如:用户名,权限。例如在购物车程序里,存放用户买的商品。
     
    销毁:一定时间(跟容器有关)内,用户无任何动作,session自动销毁。
     
    得到的方法:
    HttpSession session = request.getSession();
    常用方法setAttribute
    session.setAttribute(key,value);
    这样在另一个jsp或者Servlet里,可以用
    session.getAttribute(key);得到value
    类似一个Map
     
     
    二、org.hibernate.Session
     
    它是hibernate操作数据库的一个句柄对象。它跟上面那个Session唯一的相似处就是名字有点像,其他没任何一样的地方。
     
    一般的Hibernate程序中,Session由用户手动获取,手动关闭。
    正规项目中,在业务层获取Session
    Session session = HibernateSessionFactory.openSession();
     
    然后把此session传给dao层,将数据持久化或其他的操作。
    一次业务逻辑可能调用多个dao方法,例如银行转帐,是一个先减后增的过程,所以会调用2个dao里的方法(甲帐户减,乙帐户增)。因此,可以利用业务层产生的同一个Session来做这件事
     
    a1和a2代表帐户实体。
    a1是甲的,a2是乙的。
    a1.setAcount(a1.getAcount()-1000);
    a2.setAcount(a2.getAcount()+1000);
    dao.update(a1,session);
    dao.update(a2,session);
    Transaction tx = session.beginTransaction();
    tx.commit();
     
    最后在业务层,将session关闭
    session.close();
    或者调用HibernateSessionFactory.closeSession(session);
     
    最好能加上异常捕捉,之类,如产生异常,即时回滚。保证操作不出意外。
     
    try{
    ...
    tx.commit();
    }catch(Exception e){
    tx.rollback();
    }finally{
    HibernateSessionFactory.closeSession(session);
    }
     
    默认session的时间为20分钟,如果想在这之前清除的话可以使用Session.Abandorn方法
  • 相关阅读:
    UVALive 6909 Kevin's Problem 数学排列组合
    UVALive 6908 Electric Bike dp
    UVALive 6907 Body Building tarjan
    UVALive 6906 Cluster Analysis 并查集
    八月微博
    hdu 5784 How Many Triangles 计算几何,平面有多少个锐角三角形
    hdu 5792 World is Exploding 树状数组
    hdu 5791 Two dp
    hdu 5787 K-wolf Number 数位dp
    hdu 5783 Divide the Sequence 贪心
  • 原文地址:https://www.cnblogs.com/HiJacky/p/5792826.html
Copyright © 2011-2022 走看看