1.什么是Hibernate
Hibernate:Hibernate是一个持久层的ORM框架。
1.1Hibernate相对与JDBC的优势
1.Hiberante是对JDBC做了轻量级的封装,有良好的映射关系,能实现一对多,多对多的映射关系
2.大大减少了Dao层繁琐的代码,减少了内存的消耗,提升了性能
3.开放源代码和API,当自身功能不够用的时候可以自行扩展
1.2缺点
1.关系映射的配置比较繁琐,有些特定情况不能满足
2.不支持批量更新
2 映射的配置
【class标签的配置】
标签用来建立类与表的映射关系
属性:
name :类的全路径
table :表名(类名与表名一致,table可以省略)
catalog :数据库名
【id标签的配置】
标签用来建立类中的属性与表中的主键的对应关系
属性:
name :类中的属性名
column :表中的字段名(类中的属性名和表中的字段名如果一致,column可以省略)
length :长度
type :类型
【property标签的配置】
标签用来建立类中的普通属性与表的字段的对应关系
属性:
name :类中的属性名
column :表中的字段名
length :长度
type :类型
not-null :设置非空
unique :设置唯一
2.1 核心的配置
必须的配置
连接数据库的基本的参数
驱动类
url路径
用户名
密码
方言
可选的配置
显示SQL :hibernate.show_sql
格式化SQL :hibernate.format_sql
自动建表 :hibernate.hbm2ddl.auto
none :不使用hibernate的自动建表
create :如果数据库中已经有表,删除原有表,重新创建,如果没有表,新建表。(测试)
create-drop :如果数据库中已经有表,删除原有表,执行操作,删除这个表。如果没有表,新建一个,使用完了删除该表。(测试)
update :如果数据库中有表,使用原有表,如果没有表,创建新表(更新表结构)
validate :如果没有表,不会创建表。只会使用数据库中原有的表。(校验映射和表结构)。
映射文件的引入
引入映射文件的位置用mapping标签
3 Hibernate中持久化类的编写原则
1.必须要有无参构造方法
2.要有get set方法
3.属性类型最好是包装类型
4.最好类不要被final修饰
5.要有唯一标识OID与主键对应
3.1主键生成策略
1.uuid 利用128位的uuid算法,生成32位16进制的字符串
2.native根据数据库自己选择生成器
3.increment 适合int short long类型,hibernate以自增的方式生成唯一标识,每次增一,不能用在集群
4.identity 使用数据库本身的主键生成策略,主键必须自增
3.2持久化对象的三种状态
瞬时态
持久态
游离态
3.3持久化状态的转化
瞬时态–>持久态
调用save() saveOrUpdate()
瞬时态–>游离态
设置唯一标识OID
持久态–>瞬时态
调用delete()
持久态到–>游离态
调用close() clear() evit()
游离态–>瞬时态
设置唯一OID为null
瞬时态–>持久态
update() saveOrUpdate()
4Hibernate的一级缓存
Hibernate的一级缓存也叫Session缓存,Session缓存是一片内存空间,管理着相互关联的java对象,当查询时会用唯一标识OID到缓存中查,如果查到直接返回,没查到去查数据库,如果数据库有该对象,存到缓存
当调用session.close()缓存清空
4.1为什么持久化对象可以自动更新数据库?
一级缓存里还有个快照区,他和缓存的数据一样,当事务提交时他会检查缓存里的数据和快照区是否一致,如果不一致执行update