Hibernate面试题整理

Hibernate介绍

Hibernate是一个基于ORM的持久化层框架,它对JDBC进行了轻量级的对象封装,使开发人员可以使用面向对象的编程思想来操作数据库

HIbernate充当Dao层,根据POJO与实体类的映射配置自动生成SQL语句。

orm 思想. 对象关系映射. 通过映射文件配置对象与数据库中表的关系
O 对象
R 关系型数据库
M 映射文件

Hibernate体系结构

SessionFactory接口:生成S二十四欧尼的工厂,负责创建Session对象需要使用生成JDBC的工厂ConnectionProvider接口。
Session接口是hibernate应用程序提供的操作数据库的接口,隐藏了JDBC连接,提供了基本的保存,更新,删除,和加载java对象的方法。Session对象是非线程安全的,具有一个缓冲,位于缓存中的对象(与Hibernate Sessio关联的对象)称为持久化对象。

线程安全就是在多线程环境下也不会出现数据不一致,而非线程安全就有可能出现数据不一致的情况。

Hibernate对象状态

  • 瞬时状态
    • 没有id,没有与session关联(没有在session缓存中):customer.setCust_name("");
  • 持久化状态
    • 有id,与session关联(在session缓存中):session.save(customer);
    • 特点:持久化状态对象的任何变化自动同步到数据库中
  • 游离/托管状态
    • 有id,没有与session关联(没有在session缓存中):session.close();
      Customer c1 = new Customer();
      c1.setCust_id(1l);
      设置id不存在对应瞬时,存在则游离
new
get
save
delete
close
updata
起点
瞬时状态
持久化
游离/托管

hibernate使用原则:将我们希望同步到数据库的数据,对应的对象转换成持久化状态

配置文件

orm元数据xxx.hbm.xml映射配置文件
hibernate.cfg.xml配置数据库连接

Hibernate事务

Service层
HibernateUtils.getCurrentSession().beginTransaction();
操作事务
HibernateUtils.getCurrentSession().getTransaction().commit();
HibernateUtils.getCurrentSession().getTransaction().rollback();

Dao层
Session session = HibernateUtils.getCurrentSession();
session.get();

  • 事务特性

    • A — 原子性
      事务可以看做数据库操作的容器,对事务所包裹的操作被认为像物理上的原子,是最小、不可分割的单位,要么全成功,要么全失败
    • C — 一致性
      事务在提交前后数据总量不应该发生变化(赖以保证的基础是原子性)
    • I — 隔离性
      多个事务在并发产生的时候,可能会产生一些负面问题(脏读、不可重复读、幻读)
      提供隔离级别解决
    • D — 持久性
      保证事务提交之后,涉及到操作的数据必须被写入持久化介质(如硬盘)中
  • 事务并发问题

    • 脏读
      某事务读到了另一个事务正在操作但未提交的数据
    • 不可重复读
      一次事务中两次连续的读取到的数据内容不一致(过程中其他事务修改数据并提交了)
    • 幻/虚读
      一次事务中两次连续的读取到的数据数量不一致(过程中其他事务增加数据并提交了)

解决方法:

  • 事务的隔离级别
    1)read uncommitted : 读取尚未提交的数据 :哪个问题都不能解决
    2)read committed:读取已经提交的数据 :可以解决脏读 ---- oracle默认的
    3)repeatable read:重读读取:可以解决脏读 和 不可重复读 —mysql默认的
    4)serializable:串行化:可以解决 脏读 不可重复读 和 虚读—相当于锁表操作数据只允许串行,不允许并发
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值