l Hibernate是一个基于元数据的轻量级的ORM框架
将Java中对象和数据库的相关内容进行关系映射。类和表,对象和表中的数据,属性和字段。操作数据库采用面向对象的方式完成。
对象模型 |
关系模型 |
面向对象分析设计(UML) |
数据库设计(PD) |
类(关系) |
表(关系) |
属性 |
字段 |
Java类型 |
SQL类型 |
对象(主键属性OID) |
记录(PK) |
也称为域模型对象(domain)
l 实体域模型对象(User)POJO
l 过程域模型对象(DAO,BO)
l 事件域模型对象(事件,异常)
狭义:将内存对象永久保存到数据库过程
广义:就是指对数据的CRUD
l Hibernate框架应用环境搭建
连接数据库信息
方言
管理映射文件
其他(属性配置等)
l Hibernate框架的核心API
l Hibernate框架的主键生成策略
u 代理主键(推荐)
l 提供一个和业务无关并且能够唯一标识一条记录的字段作为主键(一般是自增的,整型)
u 自然主键
l 提供一个与业务相关的主键
u 由数据库来生成主键(代理主键)
l native :表示由方言决定采用什么数据库的主键生成方式。
n 如果是mysql方言,那么就会采用自增长方式
n 如果是Oracle方言,那么就会采用序列方式
l sequence :表示采用数据库的序列方式生成主键,可以应用在Oracle,DB2数据库中
l identity :表示采用自增长的主键生成方式,可以应用MySQL,SQL Server 数据库
u 由Hibernate框架来生成主键(代理主键)
l uuid :表示由框架根据参数(IP地址,JVM启动时间,系统时间,计算器)生成32位16进制的数字字符串。推荐使用。主键属性必须是字符串类型。
n 表示数据量大,添加数据效率高,查询效率低,通用移植性好
l increment:表示由框架本身提供的计数器的方式自动增长。
u 由用户来生成主键(自然主键)
l assigned :表示主键由用户自己维护。
l Hibernate框架的对象三种状态
u 数据库中没有与之对应的数据
u 对象与框架没有关联
u 数据中一般是存在与之对应的数据
u 对象与框架一定关联
u 数据库中一定有与之对应的数据
u 对象与框架没有关联,或连接断开。
l Hibernate框架中保存操作
持久化状态的含义就是对象和数据库中的一条数据对应,那么再保存就会有冲突了,所以不能保存。
主键生成策略不是自己维护的情况下,可以保存成功。
l Hibernate框架中的更新操作(主键更新)
不需要显示调用update方法进行更新。持久化对象属性值变化会自动更新
l Hibernate框架中的删除操作(主键删除)
删除时框架会先查询(select)数据库中是否存在,如果存在则可以删除。
l Hibernate的主键查询
u 返回结果:持久化对象或null(非空判断)
u 不支持延迟加载
u 支持缓存
u 返回结果:持久化对象或异常或代理对象
u 默认支持延迟加载
l 禁用延迟加载,可以设置<class lazy=”false”/>
u 支持缓存
l Hibernate面向对象查询
u 其实就是对SQL的封装
u Query接口
u list()方法
l 支持缓存,但自己不利用缓存
l 如果希望利用缓存,可以配置查询缓存
u iterate()方法 (N+1条语句)
l 支持缓存,并且利用缓存
l 使用一般和带缓存的方法一起用
u 批量操作DML(insert,update,delete)
l 不支持缓存操作
u 动态参数查询
l Hibernate框架的映射关系
u 多对一 (学生和班级)
l <many-to-one>
l 级联关系
n 级联不能使用delete和all
l 延迟加载
l 抓取策略
l 抓取策略是join的话,那么延迟加载不起作用。
u 一对多(班级和学生)
l 级联关系
l 延迟加载
l 抓取策略
l 反转操作(inverse=”true”)
u 多对多(学生和课程)
l 级联不应该使用delete和all
l 在任意其中一端设置反转操作
l 中间表示的两个外键不要为null,表示联合主键
u 自关联
l 是双向的一对多和多对一的特殊情况
l 使用一张表来描述数据的关系,外键字段可以为null
l MyEclipse-Tools
l Hibernate框架的延迟加载
l 解决延迟加载的方案
l Hibernate框架的缓存
u 默认支持
u 默认不支持
u Ehcache
u 不推荐使用,查询命中率不是很高。
l Hibernate框架解决数据冲突问题
u 行级锁 select .. for update
u 类似线程同步,性能低
u 时间戳
u 版本号(Hibernate)
l Hibernate框架的注解
l Hibernate框架的POJO类设计规则
l Hibernate框架的总结
u 轻量级的ORM框架
u 提供延迟加载功能,缓存机制
u 透明持久化,操作对象就等同操作数据库,隐藏了持久化的过程,使操作起来更加容易
u 由于面向对象的操作方式,进行大数据量操作时性能比较低
u 执行效率比 jdbc,ibatis低
u 影响表的设计原则
l Hibernate框架的竞争
l 框架的优化
u 去掉使用不到的拦截器
u 过滤器的过滤规则尽量不要使用/*
u 关闭开发模式(devMode)
u 尽量使用延迟加载
u 使用缓存(只读)
u 尽量使用乐观锁代替悲观锁
u 尽量使用框架的最新版本,一般会有性能方面的支持
u 推荐使用uuid主键生成策略,移植性好,支持大数据量
原文:https://www.cnblogs.com/hkdpp/p/10495877.html