HttpSession和HibernateSession的区别
来源:互联网 发布:微招聘制作软件 编辑:程序博客网 时间:2024/06/03 20:55
转自:http://blog.csdn.net/aimbetter/article/details/36667797
总而言之HttpSession是服务器tomcat自动创建的一个容器,而Hibernate的Session相当于一个缓冲器
一、javax.servlet.http.HttpSession是一个抽象接口-------来自于tomcat的servlet.api
它的产生:J2EE的Web程序在运行的时候,会给每一个新的访问者建立一个HttpSession,这个Session是用户身份的唯一表示。注意,是容器(Tomcat,Resin)自动创建的。
用途:存放这个用户的一些经常被用到的信息,例如:用户名,权限。例如在购物车程序里,存放用户买的商品。
销毁:一定时间(跟容器有关)内,用户无任何动作,session自动销毁。
得到的方法:
HttpSession session = request.getSession();
常用方法setAttribute
session.setAttribute(key,value);
这样在另一个jsp或者Servlet里,可以用
session.getAttribute(key);得到value
类似一个Map
我们来看一下它的源代码:
public interface HttpSession { long getCreationTime(); String getId(); long getLastAccessedTime(); ServletContext getServletContext(); void setMaxInactiveInterval(int var1); int getMaxInactiveInterval(); /** @deprecated */ HttpSessionContext getSessionContext(); Object getAttribute(String var1); /** @deprecated */ Object getValue(String var1); Enumeration<String> getAttributeNames(); /** @deprecated */ String[] getValueNames(); void setAttribute(String var1, Object var2); /** @deprecated */ void putValue(String var1, Object var2); void removeAttribute(String var1); /** @deprecated */ void removeValue(String var1); void invalidate(); boolean isNew();}
二、org.hibernate.Session
它是hibernate操作数据库的一个句柄对象。它跟上面那个Session唯一的相似处就是名字有点像,其他没任何一样的地方。亦可以理解为数据库层和持久化层的互访载体,也可以认为是一个缓冲器,对数据库的所有CURD操作在这个session(缓存)中都有记录,一旦做个缓存commit操作,则所有对持久化对象的操作都将映射到具体的某个数据库中,完成最后的数据更新
一般的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方法
我们来看一下它的源代码
package org.hibernate;import java.io.Serializable;import java.sql.Connection;import org.hibernate.jdbc.ReturningWork;import org.hibernate.jdbc.Work;import org.hibernate.stat.SessionStatistics;public interface Session extends SharedSessionContract { SharedSessionBuilder sessionWithOptions(); void flush() throws HibernateException; void setFlushMode(FlushMode var1); FlushMode getFlushMode(); void setCacheMode(CacheMode var1); CacheMode getCacheMode(); SessionFactory getSessionFactory(); Connection close() throws HibernateException; void cancelQuery() throws HibernateException; boolean isOpen(); boolean isConnected(); boolean isDirty() throws HibernateException;
LockMode getLockMode(); Session.LockRequest setLockMode(LockMode var1); int getTimeOut();}
- HttpSession和HibernateSession的区别
- HttpSession 与 HibernateSession的区别
- servlet的HttpSession与HibernateSession的区别
- HttpSession和jsp中session的区别
- ServletContext类和HttpSession类的区别
- HttpSession 和 ServletContext 区别
- HibernateSession
- HttpSession和Hibernate里的Session的区别。
- HttpSession和Hibernate里的Session的区别
- 业余草谈SessionFactory中的Session和HttpSession的区别
- HttpSession和Hibernate的session
- HttpSession与Hibernate中Session的区别
- HttpSession与Hibernate中session的区别
- Hibernate中Session与HttpSession的区别
- HttpSession与Hibernate中Session的区别
- HttpSession与Hibernate中Session的区别
- HttpSession与Hibernate中Session的区别
- HttpSession与Hibernate中Session的区别
- 有关HTML的一些概述
- jQuery 的ajax操作
- Java编程的基本认识
- 关于mysql数据库的外键错误 #sql-a64_1' (errno: 121)
- Python爬虫与模拟登录
- HttpSession和HibernateSession的区别
- qt5.8中的QApplication: No such file or directory问题
- mysql启动时报1067错误
- Farey Sequence
- Linux基础学习之双引号、单引号、反向引号的区别
- linux的文件指定查看工具-grep使用说明
- 深度学习之卷积神经网络CNN及tensorflow代码实现示例
- Callable类和Executors类实现简单的异步运算
- 支持向量机