hibernate 初学
1. hibernate的基本操作
执行流程:
执行流程细节:基本的配置文件
可以与mybatis进行对比着记
hibernate 的主键生成策略
映射文件说明
操作一: 保存操作
实体类:
第一步:
第二步:(https://blog.csdn.net/wang124454731/article/details/80062504 博主的解释)
第三步:直接写测试类
保存成功;
级联查询:
1. 单表查询 :
2. 多表连接
user.hbm.xml
order.hbm.xml
测试类:
执行结果做了两次查询
3. 根据id 进行删除
如果你设置的表有主外键那么就不能直接进行删除了 先查询删除主键后再删除从表
基于上面的基础将set集合设置成list集合也是可以的
4. one to one 添加
实体类:
Address.hbm.xml
order.hbm.xml
测试类:
将 session.persist(order) 替换成 session.save(order) 也是可以的
one to one 查询:
也会将绑定的address 查找出来
hibernate 基础知识
- hihibernate是一个数据库持久层框架,解决的是数据库crud问题
- mybatis hibernate就是将jdbc进行了封装,然后进行了扩展并且封装了通用的crud方法
hibernate的配置文件
1.hibernate.cfg.xml
作用:用于配置hibernate运行相关参数的一个配置文件连接相关参数
hibernate自身属性
dialect方言:告知hibernate连接的是那种数据库,hibernate会根据这种数据库的特点,进行优化。
show_sql:true|false
映射文件的注册
2.xxx.hbm.xml 映射文件 (注解 Annotation @xxxx )
文件名必须以.hbm.xml结尾 前面随便
放置位置:随便
Hibernate的核心对象
1.Configuration对象
专门读取hibernate相关配置文件的。
2.SessionFactory
创建Session对象
3.Session对象
session整个Hibernate框架的核心,负责对数据,进行CRUD的操作
注意:Session内部封装Connection对象,一一对应
4.Transaction事务
tx.begin()
tx.commit()
tx.rollback()
注意:hibernate增删改操作必须手工控制事务
5.Query 查询
负责在hibernate中进行复杂查询。
session.get() 以主键为条件的查询
Hibernate的开发步骤:O(对象) R(数据库)M(映射文件) 总结
1.O实体对象
2.R 创建数据库中的表
3.M 映射文件
4.映射文件的注册 hibernate.cfg.xml注册
API测试
session.CRUD操作
注意:increment主键生成器如何实现?
max(id)+1 作为新的主键
基本定义:
1. 对象的持久化:
2. ORM
3. 流行的ORM 框架
4. SessionFactory
5. Session 接口
6. session 缓存
设定刷新缓存的时间点
数据库的隔离级别简介
7. Transaction 事务
在mysql 中设立隔离级别
在hibernate 中设立隔离级别
持久化对象的状态
站在持久化的角度, Hibernate 把对象分为 4 种状态: 持久化状态, 临时状态, 游离状态, 删除状态. Session 的特定方法能使对象从一个状态转换到另一个状态.
对象的状态的转换图
session 的save方法
session 的 get() 和load方法
session 的update() 方法
Session 的 saveOrUpdate() 方法
Session 的 merge() 方法
Session 的 delete() 方法
通过 Hibernate 调用存储过程
Hibernate 与触发器协同工作
Hibernate 的配置文件
hibernate.cfg.xml的常用属性
1. dialect:配置数据库的方言,根据底层的数据库不同产生不同的 sql 语句,Hibernate 会针对数据库的特性在访问时进行优化
2. show_sql:是否将运行期生成的SQL输出到日志以供调试。取值 true | false
3. format_sql:是否将 SQL 转化为格式良好的 SQL . 取值 true | false
4. hbm2ddl.auto:在启动和停止时自动地创建,更新或删除数据库模式。取值 create | update | create-drop | validate
5. hibernate.jdbc.fetch_size:实质是调用 Statement.setFetchSize() 方法设定 JDBC 的 Statement 读取数据的时候每次从数据库中取出的记录条数
6. hibernate.jdbc.batch_size:设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小,类似于设置缓冲区大小的意思。batchSize 越大,
批量操作时向数据库发送sql的次数越少,速度就越快。
主键生成器
increment 标识生成器
identity 标识符生成器
sequence 标识符生成器
hilo 标识符生成器
native 标识符生成器
hibernate之间的关联关系
一对多的关联关系
数据库表的设计 单向 n : 1
双向 1 : n
<set> 元素的 inverse 属性
cascade 属性
在对象 – 关系映射文件中, 用于映射持久化类之间关联关系的元素, <set>, <many-to-one> 和 <one-to-one> 都有一个 cascade 属性它用于指定如何操纵与当前对象关联的其他对象.
在数据库中对集合排序
一对一:
基于外键映射的 1-1
基于主键映射的 1-1
映射多对多关联关系
Hibernate 检索策略
类级别的检索策略
一对多和多对多的检索策略
<set> 元素的 lazy 和 fetch 属性
延迟检索和增强延迟检索
<set> 元素的 batch-size 属性
<set> 元素有一个 batch-size 属性, 用来为延迟检索策略或立即检索策略设定批量检索的数量. 批量检索能减少 SELECT 语句的数目, 提高延迟检索或立即检索的运行性能.
一对多和多对多的检索策略
检索策略小结
Hibernate 检索方式
HQL 检索方式
投影查询
Hibernate 缓存
使用 Hibernate 的二级缓存
Hibernate 二级缓存的架构
二级缓存的并发访问策略
管理 Hibernate 的二级缓存
查询缓存
Query 接口的 iterate() 方法
管理 Session
Session 对象的生命周期与本地线程绑定
通过 Session 来进行批量操作
hibernate 初学的更多相关文章
- Hibernate初学
什么是Hibernate? Hibernate,翻译过来是冬眠的意思,正好现在已经进入秋季,世间万物开始准备冬眠了.其实对于对象来说就是持久化. 我们从三个角度理解一下Hibernate: 一.Hib ...
- 解决hibernate只能插入一条数据的问题
hibernate初学,根据视频教程写好代码后,发现无论执行多少次main函数,数据库中只有一条数据,尝试多次,后来终于发现问题... 使用的工具是:MYSQL 5.7.13 eclipse 4. ...
- 菜鸟学习Hibernate——简单的一个例子
一.Hibernate开发. 上篇博客已经为大家介绍了持久层框架的发展流程,持久层框架的种类. 为了能够使用Hibernate快速上手,我们先讲解一个简单的Hibernate应用实例hibernate ...
- 新秀学习Hibernate——一个简单的例子
一个.Hibernate开发. 上篇博客已经为大家介绍了持久层框架的发展流程,持久层框架的种类. 为了可以使用Hibernate高速上手,我们先解说一个简单的Hibernate应用实例hibernat ...
- 初学hibernate之缓存
一.1.Session级别缓存属于一级缓存,持久化对象保存在Session一级缓存中(一级缓存引用持久化对象地址),只要session不关闭,一级缓存就存在,缓存中对象也不会被回收: Session会 ...
- 初学Hibernate持久化
hibernate三种持久化对象状态:(持久化对象:Persistent Object=POJO + hbm映射) 1.瞬时状态(临时状态或自由态):PO对象刚创建(即new)开始进入瞬时状态,此时对 ...
- 初学Hibernate主键生成策略
具有业务含义的主键叫自然主键:随机生成,不具备业务含义的字段作为主键,叫代理主键. 在表与POJO类关系映射文件XXX.hbm.xml中,可通过配置id元素下generator节点的class属性指定 ...
- 初学Hibernate
Hibernate 是完全ORM的,只需要对 对象 进行操作,生成底层SQL语句 优势:1.可以简化开发 2.性能好(原生的Hibernate性能很差,要使用它,需要进行优化),优化方式:一级缓存.二 ...
- 初学hibernate的心得体会
在初步学习了hibernate之后,使我明白了hibernate是一个怎样的软件.hibernate是一个比较独立的框架,它不需要太多其他软件的支持.hibernate是一个开放源代码的关系映射框架, ...
随机推荐
- wpf 中的 自定义控件的 binding
XMl 代码 --------------------------------------------------------------------------------------------- ...
- 【springcloud alibaba】注册中心之nacos
1.为什么需要注册中心 1.1 没有注册中心会怎么样 1.2 注册中心提供什么功能以及解决什么问题 2.常用的微服务注册中心对比 3.案例项目父工程 4.nacos作为注册中心的使用 4.1 单机版的 ...
- ffmpeg 常用知识点收集
ffmpeg 常用知识点收集 一.基础简介 FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影.转换.流功能,包含了libavcodec ─这是一个用于多个项目中音频和视频的解码器库,以及l ...
- Hibernate脑图
- CSS截取字段,让过长的字段结尾变成省略号(IE有效)
text-overflow:ellipsis;overflow:hidden;<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transiti ...
- nios eclipse提示LED_PIO_BASE没有声明,怎么回事?
这是因为名字不一致引起的比如,在生成SOPC系统时,双击PIO(Parallel I/O)(在Avalon Modules -> Other 下),为系统添加输出接口,你没有把该组件改名成LED ...
- Java实现一个死锁
Java实现一个死锁 有一个藏宝图(treasureMapFragment)分成两份jack持有treasureMapFragment1残片1,json持有残片2.jack要求必须先看到json的残图 ...
- 解决方案-问题001:物理机、虚机等等Linux操作系统/usr/bin目录权限误操作,导致无法切换root
导语:平常运维人员会误操作一些目录权限,导致一些问题,那么如何恢复呢? 问题:物理机.虚机等等Linux操作系统/usr/bin目录权限误操作,导致无法切换root? 实验环境: ip地址 是否目录正 ...
- 眼镜选款新方法,用AR+Scene技术实现3D虚拟试戴
互联网和智慧终端的普及促进了电商的产生和蓬勃发展,而新技术的产生,则推动着电商领域的不断升级.疫情使得人们更加习惯于使用电商进行购物,但对传统的线上购物模式已经产生了一些厌倦,电商市场急需模式上的变革 ...
- Python - pip 批量更新
pip 常用命令 https://www.cnblogs.com/poloyy/p/15170968.html pip list 结合 Linux 命令 pip list 命令可以查询已安装的库,结合 ...