5.Hibernate 核心开发接口
一、Configuration(AnnotationConfiguration)
作用:进行配置信息的管理
目标:用来产生SessionFactory
可以在configure 方法中指定hibernate配置文件,默认(不指定)时在classpath(bin目录下)下加载hibernate.cfg.xml 文件
二、SessionFactory
作用:用于产生Session的工厂 (数据库连接池)
当它产生一个Sesion时,会从数据库连接池取出一个连接,交给这个Session,
可以通过这个Session取出这个连接(浅显的理解为:Session里面封装了Connection)
关注两个方法:
getCurrentSession():表示当前环境没有Session时,则创建一个,否则不用创建
openSession(): 表示创建一个Session(3.0以后不常用),使用后需要关闭这个Session
两方法的区别:
1.openSession永远是每次都打开一个新的Session,而getCurrentSession不是,
是从 '上下文'找、只有当前没有Session时,才创建一个新的Session
2.OpenSession需要手动close,getCurrentSession不需要手动close,事务提交自动close
3.getCurrentSession界定事务边界
上下文:所指的上下文是指hibernate配置文件(hibernate.cfg.xml)中的“current_session_context_class”所指的值:
(可取值:jta|thread|managed|custom.Class)
常用;①thread:是从当前线程找、只有当前线程没有Session时,才创建一个新的Session,主要从数据界定事务
②jta:主要从分布式界定事务,运行时需要Application Server来支持(Tomcat不支持)
三、Session
1、管理一个数据库的任务单元
2、save() Transient状态 经过save方法 变成 Persistent 状态
3、delete() 被delete对象需要有Id 因为是通过Id去删除的
4、load()
5、Get()
load方法和get方法的区别:
a)load 返回的是代理对象,延迟加载,等到真正使用对象的内容才发出sql语句,
b)get 不会延迟加载,调用get方法,会直接发出sql语句
另外:get() 和 load() 只根据主键查询,不能根据其他字段查询
6、update()
1.本意用来更新detached对象,更新完成后转为为persistent状态(默认更新全部字段)
2.更新transient对象会报错(没有ID)
3.更新自己设定ID的transient对象可以(默认更新全部字段)
4.persistent状态的对象,只要设定字段不同的值,在session提交时,会自动更新(默认更新全部字段)
5.更新部分更新的字段(更改了哪个字段就更新哪个字段的内容)(三种方法)
a)update/updatable 属性
b)dynamic-update属性
c)使用HQL(EJBQL)面向对象的查询语言(建议)
Query q = session.createQuery("update Student s set s.name='z5' where s.id = 1");
q.executeUpdate();
7、saveOrUpdate()
在执行的时候hibernate会检查,如果对象在数据库中已经有对应的记录(是指主键),则会更新update,否则会添加数据save
8、clear()
清除session缓存
无论是load还是get,都会首先查找缓存(一级缓存,也叫session级缓存),如果没有,才会去数据库查找
9、flush()
同步缓存和数据库中的数据,如果缓存中的数据和数据库中的不一致,则更新数据库中的数据
在hibernate中也存在flush这个功能,在默认的情况下session.commit()之前时,其实执行了一个flush命令
10、SchemaExport 设置是否打印,是否交由数据库执行
注:持久化对象的三种状态
一、瞬时对象(Transient Object)
如:Teacher t = new Teacher(); t.setName("xzk1");
只是在内存中有t对象,缓存中没有,而且这个t对象是没有ID值的(数据库中)
二、持久化对象(Persistent Object)
如:Teacher t = new Teacher(); t.setName("xzk1");
t.save()
在内存中有t对象,并且经过save() 后,缓存中也有,ID经过注解添加后也有(数据库中)
三、离线对象(Detached Object)
如:Teacher t = new Teacher(); t.setName("xzk1");
t.save()
session.getT****.commit();
在持久化的基础上,提交事务,此时session关闭,
所以内存中还有,但是在session缓存中没有了,数据库中仍然还有这个ID
注:缓存的概念:一个Transient对象在执行save方法时,session会在内存中开辟出一块缓存区,
这块缓存区会存有一个Map集合,当save某个对象时,会把该对象的ID作为Key,该对象的引用作为value,
当需要调用该对象时,会先从缓存中去查找,如果缓存中没有,再去问数据库要
如:load 和 get 都会先问下缓存中有没有 对应的ID的 key
5.Hibernate 核心开发接口的更多相关文章
- Hibernate学习笔记2.5(Hibernate核心开发接口和三种状态)
1.configuration(配置信息管理,产生sessionfactory) sessionfactory管理一系列的连接池 opensession 永远打开新的,需要手动close getcur ...
- Hibernate核心开发接口_SessionFactory详解
SessionFactory: a) 用来产生和管理Session b)通常情况下每个应用只需要一个SessionFactory c)除非要访问多个数据库的情况 d) 关注两个方法即: openS ...
- hibernate核心开发接口_Configuration
AnnotationConfiguration继承自Configuration,这里以AnnotationConfiguration为例: new AnnotationConfiguration(). ...
- HIbernate学习笔记(二) hibernate对象的三种状态与核心开发接口
1.在hibernate中持久化对象有三个状态,这个面试时可能会问到: (1)transient瞬时态:在数据库中没有与之匹配的数据,一般就是只new出了这个对象,并且在session缓存中也没有即此 ...
- Hibernate系列之核心开发接口
一.概述 所有的hibernate应用中都会访问5个核心接口,它们分别是: Configuration:配置hibernate,创建SessionFactory对象 SessionFactory:初始 ...
- hibernate(五)核心开发接口与对象的三种状态
本文链接:http://www.orlion.ml/37/ 一.Configuration 1.AnnotationConfiguration 2.进行配置信息的管理 3.configure()方法通 ...
- Hibernate 再接触 核心开发接口
1.可以重载方法进行配置文件的指定 sessionFactory = new AnnotationConfiguration().configure("hibernate.xml" ...
- Hibernate详解(5)——Hibernate核心接口和工作原理
Hibernate核心接口 Hibernate有五大核心接口,分别是:Session Transaction Query SessionFactoryConfiguration .这五个接口构成了Hi ...
- hibernate学习系列-----(2)hibernate核心接口和工作机制
在上一篇文章hibernate学习系列-----(1)开发环境搭建中,大致总结了hibernate的开发环境的搭建步骤,今天,我们继续了解有关hibernate的知识,先说说这篇文章的主要内容吧: C ...
随机推荐
- Python3+RobotFramewok 循环判断以及Evaluate用法(三)
本章主要介绍RF的循环,判断以及关键字Evaluate. 1. for循环 在RF中通过 :FOR 编写循环 :FOR ${i} in range 10 log ${i} @{list} create ...
- Scala API - 集合
- 安装cni网络插件-非必须
安装cni网络插件 安装cni # 安装 cni # 百度云链接:https://pan.baidu.com/s/1-PputObLs5jouXLnuBCI6Q 密码:tzqm cd /server/ ...
- ETH挖矿
转载声明:http://www.120btc.com/baike/coin/1021.html (仅为了方便自己及原文章被删除) 最近以太坊大涨市值成为仅次比特币的第二大数字货币,那么以太坊(ETH) ...
- linux下配置maven并修改maven源
参考文章 <Linux下Maven的安装与使用> <aliyun阿里云Maven仓库镜像地址> <maven国内镜像配置(Ubuntu)> 下载maven,具体目录 ...
- 【CodeForces - 939A】Love Triangle(模拟)
Love Triangle Descriptions: 正如你所知道的,没有男性飞机也没有女性飞机.然而,地球上的每一个平面都喜欢另一个平面.地球上有n个平面,编号从1到n,编号i的平面喜欢编号fi的 ...
- Windows多线程编程入门笔记
每次处理并行任务时,如果要等待用户输入或依赖外部(如与灿亨控制器响应),就应该为类似的操作单独创建一个线程,这样我们的程序才不会挂起无响应. 静态库和动态库 静态库是指在程序运行前就编译完成的库,如# ...
- 函数节流之debounce
浏览器中某些计算和处理要比其他的昂贵很多.例如, DOM 操作比起非 DOM 交互需要更多的内存和 CPU 时间.连续尝试进行过多的 DOM 相关操作可能会导致浏览器挂起,有时候甚至会崩溃.尤其在 I ...
- PYTHON 100days学习笔记007-1:python数据类型补充(1)
目录 day007:python数据类型补充(1) 1.数字Number 1.1 Python 数字类型转换 1.2 Python 数字运算 1.3 数学函数 1.4 随机数函数 1.5 三角函数 1 ...
- [转帖]华为Mate20 X 5G版拆解:巴龙5000还配备了3GB独立内存!
华为Mate20 X 5G版拆解:巴龙5000还配备了3GB独立内存! 投递人 itwriter 发布于 2019-07-29 21:35 评论(7) 有1733人阅读 原文链接 [收藏] « » h ...