面试官常问的 web后台 问题 (三)

21、Hibernate 的工作原理

①. 通过 Configuration 读取并解析 hibernate.cfg.xml 配置文件
②. 由 hibernate.cfg.xml 中的<mapping resource>读取并解析映射文件
③. 通过 config.buildSessionFactory 创建 sessionFactory
④. 通过 sessionFactory.openSession 获取 session
⑤. 通过 session.beginTransaction 开启事务
⑥. 操作数据
⑦. 提交事务
⑧. 关闭 session 和 sessionFactory

1.通过Configuration config = new Configuration().configure();//读取并解析hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>读取并解析映射信息
3.通过SessionFactory sf = config.buildSessionFactory();//创建SessionFactory
4.Session session = sf.openSession();//打开Sesssion
5.Transaction tx = session.beginTransaction();//创建并启动事务Transation
6.persistent operate操作数据,持久化操作
7.tx.commit();//提交事务
8.关闭Session
9.关闭SesstionFactory

什么是Hibernate?

Hibernate : ORM框架/持久层框架 jdbc 的一个框架
object reference mapping
通过管理对象来改变数据库中的数据、操作数据库

Hibernate优势: 跨数据库的无缝移植
hibernate核心接口
session:负责被持久化对象CRUD操作
sessionFactory:负责初始化hibernate,创建session对象
configuration:负责配置并启动hibernate,创建SessionFactory
Transaction:负责事物相关的操作
Query和Criteria接口:负责执行各种数据库查询

具体步骤:

  • 添加hibernate相关依赖

  • 在resource目录下添加hibernate.cfg.xml(核心配置文件)
    添加DTD支持
    添加Hibernate的配置
    数据库相关:(connection.username|connection.password|connection.url|connection.driver_class|dialect)
    调试相关:
    (show_sql|format_sql)

  • 在开发阶段再创建实体类和实体映射文件(*.hbm.xml)
    实体必须实现Serializable接口

22、Hibernate 的优缺点

优缺点:
①. 对SQL代码进行封装;无法对 SQL 进行优化。
②. 映射灵活,支持各种关系数据库;使用 ORM 原则,导致配置过于复杂
③. 非侵入性、移植性好;执行效率和原生的 JDBC 相比偏差:特别是在批量数据处理的时候
④. 缓存机制:提供一级缓存和二级缓存;不支持批量修改、删除

非侵入性
hibernate使用xml或JPA的配置以及数据库方言等等的机制,使得hibernate具有更好的移植性,对于不同的数据库,开发者只需要使用相同的数据操作即可,无需关心数据库之间的差异。而直接使用JDBC就不得不考虑数据库差异的问题。

23、在 Hibernate 应用中 Java 对象的状态有那些

临时状态、持久化状态、游离状态

①. 临时状态(新建状态):不处于 session 缓存中
②. 持久化状态:加入到 session 缓冲中
③. 游离状态:已经被持久化,但不在 session 的缓存中

在这里插入图片描述

24、Hibernate 如何延迟加载

调用session的load()方法加载实体类

当调用 session 的 load()方法加载实体类时,就会延迟加载

25、Hibernate 进行大批量更新的经验

1、通过 JDBC API 执行相关的 SQL 语句
2、调用相关的存储过程

26、Hibernate 的缓存机制

一级缓存:session 级别缓存,只存在于 session 的生命周期;
二级缓存:SessionFactory 级别缓存,存在于整个应用程序中;;

Hibernate缓存包括两大类: Hibernate一级缓存和 Hibernate二级缓存,当 hibernate 根据 ID访问数据对象时, 首先会从 session
一级缓存中查;查不到,如果配置了二级缓存,则从二级缓存中查;如果都查不到,再查询数据库。
①. 一级缓存:又称为”session 级别缓存”,只存在于 session 的生命周期中,当 session 关闭时,该 session 所管理的一级
缓存也会被立即清除。该缓存由 Hibernate 管理,应用程序无须干预。
②. 二级缓存:又称为”SessionFactory 级别缓存”,存在于整个应用程序中,一个应用程序对应一个 SessionFactory。该缓
存可以进行配置和更改,并且可以动态加载和卸载,hibernate 为查询结果提供了一个查询缓存,它依赖于二级缓存

27、Hibernate 中 getCurrentSession()和 openSession()的区别?

getCurrentSession():先查看线程中是否绑定了session,有则直接返回,无则先创建;事务提交后自动关闭;
openSession():直接创建新session并返回;事务提交后手动关闭。

①. getCurrentSession()会先查看当前线程中是否绑定了 session,如果有则直接返回,如果没有再创建。
而 openSession()则直接 new 一个新的 session 并返回;
②. getCurrentSession 在事务提交时会自动关闭 session,而 openSession()需要手动关闭

28、Hibernate 查询方式有哪些

①. QBC 标准查询
②. HQL 查询(Hibernate query language hibernate 查询语言)
③. 本地 SQL 查询(原生态查询)

29、Hibernate 中 load()和 get()区别

load():检索不到结果会报ObjectNotFoundException异常;支持懒加载(延迟加载);
get():检索不到结果会返回结果null;不支持懒加载(延迟加载);

①. 从返回结果上对比:get 方法检索不到结果的话,返回结果为 null;但是 load()方法检索不到结果的话,则会出现
ObjectNotFoundException 异常
②. 从检索机制上对比:load 支持延迟加载(懒加载),get 不支持延迟加载

30、Spring 是什么及 Spring 的优点

Spring 是一个轻量级的 IOC 和 AOP 容器框架,包含并且管理应用对象的生命周期和配置,提供对事务的管理;是非侵入式的,基于 Spring 开发的应用一般不依赖于 Spring 的类;对主流的框架提供了很好的集成支持,比如和 hibernate SpringMVC 等框架的集成

①. Spring 是一个轻量级的 IOC 和 AOP 容器框架
②. Spring 是非侵入式的,基于 Spring 开发的应用一般不依赖于 Spring 的类
③. Spring 是个容器,因为它包含并且管理应用对象的生命周期和配置,比如对象的创建、销毁、回调等
④. Spring 提供对事务的管理
⑤. Spring 对主流的框架提供了很好的集成支持,比如和 hibernate SpringMVC 等框架的集成

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值