Hibernate复习
第一天
Hibernate是一个持久层的ORM框架。两个配置文件,
类名.hbm.xml类的属性和表的列对应
hibernate.cfg.xml核心配置文件
Hibernate相关API:
Configuration配置对象,读取hibernate的xml核心配置,也可以加载映射文件
Sessionfactory工厂对象,在hibernate中起到缓冲区作用,负责hibernate的初始化和建立session对象,它可以将自动生成sql语句,映射数据和可重复利用的数据放入这个缓冲区中,同时它还保存了数据库的所有映射关系,维护了二级缓存
特点:
1线程安全的,可以同一个实例多个线程
2重量级的,不能随便创建和销毁
Session:应用程序和数据库之间交互操作的单线程对象,是hibernate的运作中心,是为持久化数据提供创建读取删除的能力,所有持久化操作必须在session的管理下才可以进行操作
Session实例的两种获得方法
1openSession
2getCurrentSession(优先)
区别:open的要手动关闭,get的那个创建的实例会绑定到当前线程,提交或者回滚的时候会自动关闭
事务,session.beginTransaction开启
commit方法,提交相关的实例
rollback方法,撤销事务操作
第二天
主键类型,自然主键(有业务含义)和代理主键(无业务含义)
session的api,查询get和load的区别
get是立即加载,load是延迟加载
方言:根据配置的方言生成相应的sql语句
主键生成策略uuid和native等
持久化对象的三种状态:
瞬时态,不存在持久化标识OID(相当于主键值),尚未与Hibernate Session关联
持久态,存在持久化OID,加入到了Session缓存中,并且相关联的Session没有关闭,数据库中有对应的记录
脱管态,存在持久化标识OID,并且仍然与数据库中的数据存在关联,只是失去了与当前Session的关联
持久态对象能自动更新数据库
Hibernate的一级缓存,提供运行性能,指的是session缓存,减少对数据库的访问次数
一级缓存的内部结构,快照区,确保一级缓存中的数据和数据库中的数据一致,不一致会执行update语句
第三天
级联操作,双向关联会产生多余的sql语句,
处理方法就是这两个,cascade和inverse,他们区别如下
cascade操作一个对象的时候,是否操作其关联对象
inverse强调的是外键维护权
左外连接:返回包括左表的所有记录和右表中符合连接条件的记录
第四天
使用session的5种查询:
HQL:代表Hibernate的查询操作,针对query来操作,语法像sql语法,但是是完全面向对象的
QBC:完全面向对象,可拓展条件的api,不需要考虑底层实现和sql语句,针对Criteria来操作
SQLQuery:接受sql的查询
对象图导航检索,根据已加载的对象,导航到他的关联对象,前提是映射文件上配置多对一的关系
OID,用get和load方法加载某条记录对应的对象
投影查询:返回指定的列的数据
离线条件查询:脱离session,将dao层的的语句转移到别的层
抓取策略:是提升性能的一种手段,联合延迟加载使用,
抓取策略:查询到某个对象的时候,如何抓取其关联对象,这个可以配置完成,在关联对象的标签上配置fetch属性
类级别的延迟加载我们一般不进行修改
关联级别的延迟加载,通常在<set>和<many-to-one>上进行配置
<set>默认true,采用延迟加载
<many-to-one>默认proxy,的延迟加载取决于一的一方上的lazy属性的值
<set> 默认select,发送普通的select语句
<many-to-one>,默认select,发送普通的select语句查询相关对象
总结fetch和lazy的作用,fetch主要控制抓取对象的时候发送SQL语句的格式的,lazy主要控制查询其关联对象的时候是否采用延迟加载
batch-size批量抓取
Hibernate复习的更多相关文章
- Hibernate复习之Hibernate基本介绍
众所周知.眼下流行的面向对象的对象关系映射的Java持久层框架有MyBatis和Hibernate.他们都是对象关系映射ORM. 解决的主要问题就是对象-关系的映射.域模型和关系模型都分别建立在概念模 ...
- hibernate复习第(4)天
1.hibernate的映射类型.hbm.xml中property中的type属性.这个type属性是表示持久化类中的属性对应数据库中的什么数据类型,用来构建一种映射type的可选值:hibernat ...
- hibernate复习第(三)天
今日要点: 1.继承关系映射 一个表对应一个映射树(subclass) 一个子类一个表,子类只有父类没有的字段(joined-subclass) 鉴别器和内连接结合使用(subclass join) ...
- hibernate复习第(二)天
今日要点: 关联映射 多对一(Employee - Department) 一对多(Department - Employee) 一对一(Person - IdCard) 多对多(teachet - ...
- hibernate复习第(一)天
首先导入jar. 这个版本是3.2.5 开发流程: 1.由Domain object ->mapping ->db (官方推荐) 2.由DB开始,使用工具生成mapping和Domain ...
- HIBERNATE知识复习记录4-HQL和QBC
Hibernate中共提供了三种检索方式:HQL(Hibernate Query Language).QBC.QBE(Query By Example). HQL 是Hibernate Query L ...
- HIBERNATE知识复习记录3-关联关系
先上一张图,关于几种关系映射: 抄一段解释: 基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用.关联关系分为上述七 ...
- HIBERNATE知识复习记录1-连接及常用方法
要去面试了,复习一下HIBERNATE的相关知识吧,原来边看视频边写的代码如下,已经分不清先后次序了,大致看一看吧. 先看下总的配置文件hibernate.cfg.xml: <?xml vers ...
- Hibernate 知识点复习
核心接口 1 Configuration接口负责配置并启动Hibernate,创建SessionFactory对象 2 SessionFactory接口负责初始化Hibernate.它充当数据存储 ...
随机推荐
- YII实现restful,postman进行接口测试
Yii2 restful API文档 一.配置模块: 1.Config/main.php: 2.创建模块目录: 3.Module.php: 二.路由配置: 三.控制器: 四.Models: 五.测试: ...
- 发布npm
前言 我们npm publish发布的时候,一定是本地文件发布到远程仓库,并且登录到http://registry.npmjs.org(即npm adduser或npmlogin)之后,才可以进行发布 ...
- MapServer Tutorial——MapServer7.2.1教程学习——第一节:MapServer的基本配置管理,静态地图应用以及MapFile文件
MapServer Tutorial——MapServer7.2.1教程学习——第一节:MapServer的基本配置管理,静态地图应用以及MapFile文件 前言 万事开头难,有了<MapSer ...
- 两小时内sql
select convert(datetime,convert(char(20),dateadd(hour,-2,getdate())))
- ln 链接命令 简要说明 软硬链接关系说明
ln [选项] 目标 -s 创建符号链接(软链接) -f 强制创建链接 -i 覆盖前先询问 -v 显示创建链接过程 ln命令不能对目录创建硬链接,但可以创建软链接,对目录的软链接经常被用到 删除软链接 ...
- 对TCP协议握手的理解(转)
reference:https://www.cnblogs.com/awkflf11/p/9191708.html 目录: 31.Tcp握手的一些问题? 21.Tcp三次握手及SYN攻击: 四次握手? ...
- 读入一个字符串str,输出字符串str中连续最长的数字串
要求: 读入一个长度不超过256的字符串,例如“abc123defg123456789hjfs123456”.要求输出“123456789” 思路: 遍历字符串,如果是数字串则计算往后一共有多少个数字 ...
- ACM-ICPC 2018 南京赛区网络预赛B
题目链接:https://nanti.jisuanke.com/t/30991 Feeling hungry, a cute hamster decides to order some take-aw ...
- java中的Iterator和ListIterator的区别
(一)iterator迭代器 Collection的iterator方法返回一个实现了一个Iterator接口的对象 Iterator接口中包含三个方法: 1)E next() 2)boolean h ...
- 2019-04-15-day032-多进程介绍
内容回顾 基于原生socket的udp协议实现将client端发送过来的消息放到字典中 字典的key是所有客户端的地址,value是一个列表 io :输入输出, 输入到内存,向内存输入 从内存中向外( ...