首页 > 代码库 > hibernate面试点

hibernate面试点

1.谈谈你对hibernate的认识和理解

  01.全自动的ORM框架

  02.子项目

  03.面向对象的思想来解决操作数据库

 

  01.hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,使得程序员可以按照面向对象的思想来操控数据库中的数据

  02.hibernate的核心接口有Configuration、SessionFactory、Session、Transaction、Query、首先由Configuration获取配置信息并做一切初始化的工作,接着通过SessionFactory创建SessionFactory,再通过SessionFactory创建Session,然后程序就可以使用Session完成增删改查操作,如果需要使用复杂一点的查询功能,则可以通过Session获取Query

  03.hibernate的实体存在着,瞬时状态,持久状态,托管状态,(用new创建的实体对象属于瞬时状态,一般通过save()方法,saveOrUpdate()等方法转换成持久状态,而托管状态则通过close(),evicrt()等方法转换而成。)

  04.hibernate的优缺点有:

    001.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码

    002.Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作

    003.Hibernate使用Java反射机制而不是字节码增强程序来实现透明性。

    004.Hibernate的性能好,映射灵活性比较出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

2.主键生成策略  和  hbm2ddl

 

3.get 和 load 的区别

  01.立即加载和延迟加载

  02.1和2级缓存中查询

  03.如果数据库中没有数据

  04.load也可以立即加载

4.evict() 和clear()

 

5.hibernate的缓存机制

  1级缓存 session

  2级缓存 sessionFactory  -----> 查询缓存

6.hibernate三种状态,以及之间的转换

  我们创建的对象,从数据库中获取的对象!

  这些对象,在hibernate中的状态!

  01.瞬时状态,没有 oid

    Student stu = new Student();

  02.持久状态

    Student stu = (Student)session.get(Student.class,1);

  03.游离状态   有oid

    session.clear();

    session.evict();

7.commit() 和 flush()的区别

  commit() 是提交事务  永久

  flush() 是清理缓存!  暂时

  但是两者都能把数据同步到数据库!

 

  01.commit执行之前,先执行flush

  02.flush执行缓存清理

  03.缓存清理,先 执行脏检查

  04.什么脏检查和脏对象!

    一个对象在被session管理的时候,会有一个快照保存在session中!

    如果后续我们对这个对象的属性进行修改,那么在脏检查的时候,会拿我们这个修改

    之后的对象和快照进行比对!我们这个对象发生了变化!那么这个对象就是脏对象!

    这个脏对象会被保存到数据库中!

8.save() saveorupdate() update() merge()的区别

  01.三种状态

  02.状态之间的转换

  03.merge不会改变对象的状态

9.openSession getCurrentSession 和 threadLocal<Session> 的区别

hibernate面试点