zoukankan      html  css  js  c++  java
  • HttpSession and 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);
    }
     
  • 相关阅读:
    【转】《基于MFC的OpenGL编程》Part 5 Transformations Rotations, Translations and Scaling
    【转】 《基于MFC的OpenGL编程》Part 10 Texture Mapping
    【转】 《基于MFC的OpenGL编程》Part 11 Blending, Antialiasing and Fog
    win form 托盘功能的实现(引用CSDN)
    C# win form退出窗体时对话框实用
    智能DNS 笔记
    iis无法启动, 找出占用80端口的罪魁祸首
    gvim for windows的剪贴板操作
    内容交换
    Content Networking 读书笔记
  • 原文地址:https://www.cnblogs.com/sdream/p/5966722.html
Copyright © 2011-2022 走看看