执行流程:
执行之前肯定得先配置一下pojo和数据库映射文件之间的关系
刚开始的时候它会通过Configuration 这个对象去读取hibernate.配置文件和映射文件然后就生产出SeesionFactory (简称会话工厂 自我理解为session工厂),有了SessionFactory 我们就可以取得session 然后通过session 去操作数据库, session中提供了很多操作数据库的方法比如 有:save() update() delete get() load()createQuery() 等。遇到增删改操作就得需要Transaction事务管理对象来提交或者回滚,当程序运行结束后就释放资源关闭session
什么是hibernate一级缓存:
这么说吧 我联合一下session一起说,首先session和hibernate的一级缓存的生命周期是一样的,比如当前session关闭,一级缓存就没有了,个人认为seesion也就是hibernate的一级缓存,一级缓存会存储对象但是不会存储对象属性,当你第一次去查询的时候获得了当前对象,session(一级缓存)就会把他缓存起来,如果你再次去查询的时候他会先判断缓存中有没有这个id对象 如果有就直接从缓存中取出来没有就去数据库中获取 ,取的同时把它添加到缓存中,支持缓存的方法 又 get( ) save( )
load()等。
什么是hibernate的快照机制:
我举个例子说吧 比如你根据id查询出一个对象 此时hibernate 会把这个对象结果存入一级缓存区 顺便拷贝一份放到快照区域,当对对象进行操作同时执行了提交操作这个是后会清理一级缓存,在清理一级缓存的时候 hibernate会将一级缓存中的当前操作对象和快照区中的对应对象进行比较如果不相同会执行更新语句如果相同就不执行任何语句目的是为了确保与数据库中的数据同步。
为什么要用hibernate
hibernate 封装了jdbc 使我们对数据的操作更加简便 他的操作灵活 对于各种关系映射 可以很容易的进行处理 比如一对多 多对一等。个人觉的最重要的一点是大大简化了对Dao层编码工作,不用谢一大堆代码去进行数据操作,只要执行两三条语句就行了
hibernate 是如何延迟加载的
当你查询数据的时候 此时数据不会存在于内存中 只有当你要用到这个数据的时候才会放入内存中 这样就实现了延迟加载,延迟加载会提高服务器对内存的开销,也提高了服务器的性能
hibernate有几种查询方式:
我个人常用的是对象导航 还有HQL,原生SQL也用过一点