文档章节

httpSession 和 hibernate Session的区别

白尒摩斯
 白尒摩斯
发布于 2016/04/19 17:28
字数 743
阅读 7
收藏 0
点赞 1
评论 0

jsp中的session是一个可以理解为会话级的存储变量,是web间信息互访的载体,而Hibernate中的session一个全新的概念,可以理解为数据库层和持久化层的互访载体,也可以认为是一个缓冲器,对数据库的所有CURD操作在这个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唯一的相似处就是名字有点像,其他没任何一样的地方。亦可以理解为数据库层和持久化层的互访载体,也可以认为是一个缓冲器,对数据库的所有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方法



© 著作权归作者所有

共有 人打赏支持
白尒摩斯
粉丝 0
博文 17
码字总数 6754
作品 0
程序员
HttpServletRequest.getSession特性和Session周期

request.getSession()和HttpServletRequest.getSession(boolean)的区别Session的生命周期 HttpSession session=request.getSession(); 1查询浏览器中是否有session对象, 2如果没有,就创建一......

城固如春
2016/10/13
15
0
HttpServletRequest.getSession特性和Session周期

request.getSession()和HttpServletRequest.getSession(boolean)的区别Session的生命周期 HttpSession session=request.getSession(); 1查询浏览器中是否有session对象, 2如果没有,就创建一......

day戴
2014/05/30
0
0
struts2+spring 中使用servlet时为什么我取不到action中设置的session值?

就是我的项目是用struts2+hibernate+spring,spring注入用的是注解的方式,但是我另写了一个servlet接受请求时,登录action中设置的session值在servlet中取不到,难道是action中设置的sessi...

decodeLife
2013/01/07
1K
2
sessionFactory与session以及datasource

sessionFactory与session以及datasource 标签: sshSSHSSh 2012-12-13 10:15 6221人阅读 评论(1) 举报 分类: JAVA(112) 版权声明:本文为博主原创文章,未经博主允许不得转载。 1.sessio...

什么是程序员
2016/10/26
2
0
springMvc结合junit测试,无法初始化applicationContext

想在测试类中直接注入,各种问题 pom中如果引入这个 javaxjavaee-api6.0 错误如下 Caused by: java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstrac......

vncn
2015/03/05
1K
2
Hibernate中SessionFactory的理解(转载)

Session接口   Session接口对于Hibernate 开发人员来说是一个最重要的接口。然而在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源。这在实际项目中确实很...

源-代码
2016/05/09
113
0
JAVA_SSH框架之小知识

谈谈对mvc的理解? MVC是Model-view-Controler的简称.即模型-试图-控制器.MVC是一种设计模式,它强制性的把应用程序的输入,处理和输出分开.MVC中的模型 试图 控制器他们分别担负不同的任务. (...

Miss_差不多
2017/11/24
0
0
监听当前用户的所有操作并形成日志存库,系统架构是SpringMVC+hibernate的

我现在碰到一个问题:hibernate的CRUDListener监听当前用户的所有操作,并存库。现在能做到对用户的所有操作都监听了,但是当前用户却获取不到。具体的说就是,Httpsession拿不到,我有看过红...

五步千里
2014/12/10
698
7
为什么要使用Hibernate?

1、讲解什么是Hibernate。 Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 2、讲解...

sunflowerlb
2013/06/13
0
0
到底创建了几个Session

问:浏览器访问一个站点,产生一个session,接着进行以下操作: 1、在同一个浏览器新打开一个tab卡,访问同一站点,此时几个session 2、将新打开的tab卡拖拽出来,成为两个浏览器的时候,创建...

梦想修补师
2017/10/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

高效编写Dockerfile的几条准则

概述 Dockerfile 是专门用来进行自动化构建镜像的编排文件(就像Jenkins 2.0时代的Jenkinsfile是对Jenkins的Job和Stage的编排一样),我们可以通过 docker build 命令来自动化地从 Dockerfi...

小致dad
47分钟前
0
0
SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
9
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
7
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
197
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部