Hibernate(2):持久化

(一)持久化

(1)持久化类

  • 持久化类:JavaBean+对应映射的配置文件(xxx.hbm.xml)
  • 规范
    • 提供一个无参的构造方法
    • 属性提供get和set方法
    • 基本数据类型建议使用包装类
    • 提供OID(Object Identifier),一个标识属性,映射数据库的主键

(2)主键

  • 自然主键:是对象本身的一个属性
  • 代理主键:不是对象本身的一个属性,而是单独创建的一个字段

(3)MySQL方言

当MySQL版本为5时,使用<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>,才能在数据库中成功创建表

(4)主键生成策略

  • 关于xx.hbm.xml中中< id >生成策略
    • increment,不适用于并发场景
    • identity,要求数据库主键auto_increment,不适用于Oracle
    • sequence,不适用于MySQL
    • native,Hibernate根据底层数据库不同自动采用identity或sequence的一种作为主键生成策略
      • 适用于short、int、long类型主键
    • uuid,适用于String类型的主键
      • 比如生成的id为8a0afb2766a5b0a90166a5b0abd00000
    • assigned,主键自定义维护
		<id name="id" column="id">
            <!--
                increment:获取数据库主键的max,max+1之后返回
            -->
            <generator class="increment"/>
        </id>

(5)持久化对象状态

  • 将一个实例化对象保存到数据库的过程中,持久化对象会以此经过下面三个状态
  • 瞬时状态
    • 通过new创建的对象实体,没有被session管理(没有OID的值)
  • 持久状态
    • session.save(Javabean)之后,持久化对象有OID的值
  • 脱管状态
    • session.close()之后,持久化对象没有被session管理
  • 关键是区分OID和是否被session管理

(6)持久化对象状态转换☆

如果了解持久化对象状态的含义,状态之间的转换就很容易弄懂

  • 得到瞬时态:调用new
  • 瞬时态→持久态:session.save() or session.saveOrUpdate()
  • 持久态→脱管态:session.close()
  • 脱管态→持久态:update()

关于状态转换图参考:https://blog.csdn.net/qq_36748278/article/details/78057575

(1)持久态

  • 对于持久态的对象,如果更新对象的值,会自动将更新保存到数据库
    • 原因:Session一级缓存

(二)缓存

(1)Session一级缓存

  • Session缓存
    • 程序从内存中读取持久化对象,而不用访问数据库
    • 优点:减少对数据库的直接访问,提高数据的访问速度
    • 利用控制台信息可以间接证明缓存存在
  • Session快照
    • 作用:保持数据一致,自动更新数据库
    • 工作流程:如果缓存区域和快照区域值不同,则会修改快照区域,同时更新数据库
  • session.clear() :清空session缓存
  • session.evict(javabean对象) :清空特定对象缓存
  • session.flush() :手动更新缓存

(2)SessionFactory二级缓存

留坑…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值