[知了堂学习笔记]Hibernate总结
-
Hibernate是什么
- Hibernate是一个ORM、持久层框架,是对JDBC做轻量级封装的框架,同时Hiberbnate的本质是一个反射的实现。
-
ORM是什么
- O:object R:relations M:mapper
- 对象关系映射,关系型数据库与对象之间的映射,什么样的表映射成什么样的类,表中的列映射成属性,表中的每一行数据就是这个类的一个对象
- 比如:mybatis也是ORM框架
- 除映射对象外,还有VO值对象,值对象在数据传递过程中,是数据集成的对象
-
持久层是什么
- 实现持久化操作的层
- 固化数据就是持久化,把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘,数据库)。
-
Hibernate的配置文件/配置项/注解
-
hibernate.properties
必须的配置项:- jdbc的四个连接
- 数据库方言配置
可选的配置项: - C3P0连接池的配置项
- 二级缓存的配置项
- show_sql
- 生成表结构的策略配置
hibernate映射
注解和映射文件中的配置就是配置ORM
-
-
Hibernate的核心接口和类
- Configuration:读取配置文件
- SessionFactory:一个数据库对应一个sessionFactory,提供测试连接池,重量级
- Session:会话
- Transaction:事务,几句sql语句封装为一组,为一个事务,这几句sql语句之间的关系就是要么全部成功,要么全部失败
- Query:查询,使用HQL
- Critirea:查询,面向对象的查询
-
Hibernate开发的几种方式
- 写DB(表)——-生成映射文件和映射类
- 写映射文件和映射类——生成DB(表)【官方推荐】
- 写映射文件——生成映射类和DB(表)
-
Hibernate的id生成策略
- increment
- identity
- sequence
- hilo
- seqhilo
- uuid
- guid
- native
- assigned
- select
- foreign
- sequence-identity
Hibernate的集合映射
- Hibernate的关联关系映射
- Hibernate的懒加载
- Hibernate的缓存
- Hibernate的级联和反转
- Hibernate的事务
- Hibernate的优化
- HQL的使用
面试点
1.openSession()和getCurrentSession()
- openSession():重新建立一个新的session
- getCurrentSession():使用当前的session
- getCurrentSession创建的session会和绑定到当前线程,而openSession不会。
- getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭
2.get()/load()
- load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常;
- get方法检索不到的话会返回null;
3.Hibernate对象的状态
4.懒加载
- 什么是懒加载
- 懒加载也就是延迟加载
- 在哪些情况会使用懒加载
- load()
- 关联关系中的对象属性
- 关联关系中的集合属性
- 如何解除懒加载
- lazy =false:set【需要发送两个sql语句】/class【直接做表的连接】
- Hibernate.initialize()【手动解除】
5.缓存
- 什么是缓存
- 介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。
- 以什么形式存在
- 大部分 map 键值对
- 模拟缓存
- 一级缓存:
- session缓存,同一个session的操作共享的缓存 ,默认开启
- 二级缓存:
- sessionFactory缓存,所有session共享缓存,二级缓存是需要配置的,作用于内存和硬盘中;
- 配置二级缓存:1.引入jar包;2.启用二级缓存;3.配置二级缓存的提供类;4.配置哪个映射类使用二级缓存和缓存策略
- ehcache/oscache…
6.级联和反转
- 级联: cascade
- 数据的操作,操作有关联关系的数据时,将有关联的数据一并操作
- 反转:inverse
- 关系的操作,inverse=true【例如:员工和部门的关系,如果 部门 inverse = true,那么关系交给员工维护】
- 关系交给谁维护
级联和反转在使用是不会相互影响,但是有一定关系
7.Hibernate的优化
- Hibernate是对JDBC的一个封装
- Hibernate简化编码
- 提供很多机制优化性能
- 缓存机制
- 关系映射 :id生成策略、级联、懒加载、反转
- API的使用:get()/load();list()/iterator()
- HQL的优化:Hibernate会把HQL翻译为更优化的sql执行
-
批量的处理
- 批量保存: save(),save()做批量保存二级缓存应该禁用,一级缓存定期清理
- 批量删除和修改:delete()/update(),先做查
- 批量操作: SqlQuery接口,原生sql
-
数据查询的优化
- HQL
- API的选择:get()/load();list()/iterator()
- 抓取(fetch)策略的选择,跟懒加载有一定重叠,抓取关联关系的属性时的策略
- 集合:join/select/subselect
- 关联对象:join/select
请关注“知了堂学习社区”,地址:http://www.zhiliaotang.com/portal.php