Hibernate面试题

1、JDBC的缺点?

  1. hibernate适合用中小型企业开发软件代码相当繁琐。
  2. 从一个数据库移值到另外一个数据库,得改变很多内容,比较差。
  3. 在进行请求的时候,直接从内存中提取数据就可以了,这样的过程称为数据缓存,Jdbc虽然提供了数据库连接池,但是没有提供数据缓存。
  4. jdbc技术是面向sql语句操作,而不是面向对象操作的。
2、JDBC的优点?

  1. 如果操作数据库,则越底层效率越高。
3、Hibernate的优点?

  1. Hibdrnate的代码是比较简单的。
  2. Hibernate是面向对象的操作。
  3. Hibernate的移动植性很强。
  4. Hibernate的缓存是世界级的。
4、Hibernate的缺点?

  1. 不能干预sql语句的生成。
  2. 如果一张表中有千万级别的数据量,也不适合用Hibernate。
  3. 如果表之间的关系相当复杂,也不适合用hibernate来做。
  4. hibernate适合用中小型企业开发软件。
5、Hibernate的编程步骤?
  1. 创建 pojo 类;
  2. 创建配置文件(包含数据库连接的相关信息,以及连接的映射文件);
  3. 创建映射文件;
  4. 调用 hibernate 的 API;
创建 Configuration;
创建 SessionFactory;
创建 Session;
启动事务,session.beginTransaction();
执行 CRUD 操作;
提交或回滚事务;
6、Hibernate的执行流程?

7、关于SessionFactory?
1、sessionFactory是存放配置文件、映射文件、持久化类的信息的。
2、sessionFactory只有一个,一个sessionFactory代表一个数据库的链接
3、sessionFactory类本身是线程安全的。
4、维护着 hibernate 的二级缓存(可选)。
5、创建session。
8、关于Session?
  1. 轻量级的,可以频繁的创建和删除,一个session代表数据库的一个链接,一般一个事务中的操作对应一个Session
  2. 线程不安全的(多线程访问需要进行线程控制);
  3. 维护着 hibernate 的一级缓存(必用的);
  4. 可以执行 CRUD 操作;
9、Session的get()和load()方法的区别?
session.get(...):
1)数据库中无对应记录,返回 null;
2)直接到数据库中去查;
3)使用代理类;
session.load(...):
1)数据库中无对应记录,抛出 ObjectNotFoundException;
2)先到缓存中去查,缓存中没有,再到数据库中去查;
3)不使用代理类;
10、对象的状态?

说明:
1、把1,2,3步这样的对象称为临时状态的对象。
2、临时状态的对象没有和hibernate发生交互。
3、当执行第四步的时候,pereson对象和hibernate容器发生了交互,如果主键的生成机制为increment,这个时候会发出,Select max(pid) 查找主键的最大值,如果主键的生成机制为identity,则会发出insert语句。
4、把第四部完成以后的对象称为持久化对象,因为和hibernate发生交互了。
5、当执行第5步,完成事务提交,这个时候hibernate中的session并没有关闭,所以该对象还是持久化对象,在数据库里有对应的值了。
6、当执行第6步的时候,session关闭了,该对象变成脱管对象脱离hibernate管理了。
11、对象状态转化图?











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值