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> 的区别