Hibernate中的Session
我们之前也经常使用Session,通过连接服务器将需要保存的值存到服务器的session中,这是之前关于session的简单应用。现在看到Hibernate框架中也有关于Session的定义,该定义是和之前的有所不同的,我们先来看看什么是Hibernate中的Session!
Session是Hibernate运作的中心,对象的生命周期、事务的管理、数据库的存取都与Session相关,Hibernate在对数据库进行操作之前,必须先取得Session实例。这其实跟我们在使用JDBC对数据库进行操作之前,必须先获取Connection实例是一样的。
Session接口是Hibernate向应用程序提供的操作数据库的最主要的接口,它提供基本的保存、添加、删除和更新java对象的方法,Session具有一个缓存,位于缓存中的对象成为持久化对象,它和数据库中的相关表相对应。Hibernate中的Session作为Hibernate的一级缓存,session的缓存是一块内存空间,在这个内存空间存放了相互关联的Java对象。Session的缓存是内置的,不可被拆卸。
Session作为Hibernate的一级缓存,提供了相应的方法,当我们在程序中需要持久化这些Java对象时,可以直接通过Session,来操作这些Java对象,当程序中需要调用Session的save()、update()、saveOrUpdate()、load()或者get()以及查询的query()方法的时候,如果在缓存中还不存在这些对象,我们就将这些Java对象添加的一级缓存中,当清理缓存时,Hibernate会根据缓存状态变化来同步更新数据库。下面来看一下Hibernate使用一级缓存的图解:
上图是描述程序查询session缓存是否存在,当不存在查询数据库,之后放入session缓存中,当应用程序第二次调用时可以直接调用session缓存中数据,可以减少访问数据的频率。
有放入Session缓存总数据的方法,就有清理的工具,Session为应用功能程序提供了两个管理缓存的方法:
(1)、evict(Object o):从缓存中清除参数指定的持久化对象
(2)、clear():清除缓存中所有的持久化对象
Hibernate中的Session的更多相关文章
- 第四讲 :hibernate中的session
hibernate中的session中可以进行增删改差,通过工具类可以得到相关的工具类. 方法概要: Transaction beginTransaction()开始一个工作单元,得到关联的事务对象 ...
- 关于hibernate中的session与数据库连接关系以及getCurrentSession 与 openSession() 的区别
1.session与connection,是多对一关系,每个session都有一个与之对应的connection,一个connection不同时刻可以供多个session使用. 2.多个sessi ...
- (八) Hibernate中的Session以及事务
HibernateUtil.getSessionFactory().getCurrentSession() 和HibernateUtil.getSession() 的区别: 1.异:getCurren ...
- Hibernate中的Session对象 标签: hibernatesession 2017-01-22 22:10 238人阅读 评论(
Hibernate中的Session 大家在看hibernate视频的时候一定都发现了,每次要操作数据库,总是要新建一个session对象,Hibernate在对资料库进行操作之前,必须先取得Sess ...
- hibernate 中的session和事务(Transaction)
在使用hibernate开发时,遇到最多的就是session与事务,那么他们两个有什么关系呢?下面我来抛砖引玉: 1.session是hibernate中的以及缓存机制,是用来对数据进行增删改查的一个 ...
- Hibernate中的Session缓存问题
1. Session 缓存: 1) . 在 Session 接口的实现中包括一系列的 Java 集合 , 这些 Java 集合构成了 Session 缓存 . 它用于存放 Sessi ...
- Hibernate中的session和load延迟载入矛盾问题,怎样解决?
假设延迟载入出现session close的情况下 方法1.在web.xml中配置spring的openSessionInViewFilter <filter> <filter-n ...
- Hibernate中的session对象update方法的使用
使一个游离对象转变为持久化对象.例如以下代码在session1中保存了一个Customer对象,然后在session2中更新这个Customer对象: Customer customer = new ...
- hibernate中获得session的方式
his.getsession实际上是调用了父类中的方法获得session.使用spring管理hibernate的SessionFactory的时候,这个方法会从session池中拿出一session ...
随机推荐
- SpringBoot读取properties中的属性值
1.在application.properties中添加以下内容: learn.blog.name=hello learn.blog.title=千回教育系统 2.新增属性关联的类: package ...
- ReentrantLock 非公平锁不公平在哪
重入锁关键地带: 1:使用unsafe的cas方式对AQS中的state成员变量进行“原子加一”操作. 2:如果当前线程多次lock,相当于对state在原有值基础上继续加一操作:释放锁的条件为“原子 ...
- 【C++札记】实现C++的string类
C++有了string类使得操作字符串变得很方便.有关string类,面试过程中也经常问到的就是自己实现一个sring类.下边实现个String类供大家参考: String.h #pragma onc ...
- PAT(B) 1060 爱丁顿数(Java:21分)
题目链接:1060 爱丁顿数 (25 point(s)) 题目描述 英国天文学家爱丁顿很喜欢骑车.据说他为了炫耀自己的骑车功力,还定义了一个"爱丁顿数" E ,即满足有 E 天骑车 ...
- Linux忘记root密码操作方法
此方法为:进入单用户模式,直接修改新密码覆盖掉以前的root密码. 操作步骤: 1.进入单用户模式 2.修改root密码 1.进入单用户方法: 1)启动Linux时,通过按上下键(其他键也可以)让Li ...
- python爬取b站排行榜视频信息
和上一篇相比,差别不是很大 import xlrd#读取excel import xlwt#写入excel import requests import linecache import wordcl ...
- Spring Boot 五种热部署方式
[推荐]2019 Java 开发者跳槽指南.pdf(吐血整理)>>> 1.模板热部署 在SpringBoot中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不 ...
- 2.7_Database Interface OLE-DB诞生
ODBC仅支持关系数据库,以及传统的数据库类型,并且只以C/C++语言API(API就是一些C语言的代码,是最底层的程序,在windows中就是一些.dll的文件)形式提供服务,因而无法符合日渐复杂的 ...
- ① Python3.0基础语法
稍微了解一下py2.0和py3.0的区别,Py3.0在设计的时候,为了不带入过多的累赘,没有考虑向下兼容低版本的Py2.0.而在低版本中Py2.6作为过渡版,基本使用Py2.x的语法和库,同时考虑Py ...
- Process.Start cmd 参数空格问题解决
Process.Start("cmd.exe", "/c start \"title\" \"C:\\Program Files\\a. ...