A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 Jack.李 于 2018-3-15 10:36 编辑

1.为什么要使用Hibernate开发你的项目呢?Hibernate的开发流程是怎么样的?
为什么要使用
①.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
②.Hibernate 是一个基于JDBC的主流持久化框架,是一个优秀的ORM 实现。他很大程度的简化DAO层的编码工作
③.hibernate 的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
开发流程见下图
   图片在附件里面
file:///C:\Users\MECHREVO\AppData\Local\Temp\ksohtml\wps2D79.tmp.jpg
2.什么是延迟加载?
    延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。
3.说一下hibernate的缓存机制
A:hibernate一级缓存
1hibernate支持两个级别的缓存,默认只支持一级缓存;
2)每个Session内部自带一个一级缓存;
3)某个Session被关闭时,其对应的一级缓存自动清除;
B:hibernate二级缓存
(1) 二级缓存独立于session,默认不开启;
4.Hibernate的查询方式有哪些?
本地SQL查询、Criteria(QBC)Hql
5.如何优化Hibernate?
1.使用双向一对多关联,不使用单向一对多
2.灵活使用单向一对多关联
3.不用一对一,用多对一取代
4.配置对象缓存,不使用集合缓存
5.一对多集合使用Bag,多对多集合使用Set
6. 继承类使用显式多态
7. 表字段要少,表关联不要怕多,有二级缓存撑腰
6.Hibernate中GET和LOAD的区别?
    请注意如果没有匹配的数据库记录,load()方法可能抛出无法恢复的异常(unrecoverable exception)。 如果类的映射使用了代理(proxy)load()方法会返回一个未初始化的代理,直到你调用该代理的某方法时才会去访问数据库。若你希望在某对象中创建一个指向另一个对象的关联,又不想在从数据库中装载该对象时同时装载相关联的那个对象,那么这种操作方式就用得上的了。 如果为相应类映射关系设置了batch-size 那么使用这种操作方式允许多个对象被一批装载(因为返回的是代理,无需从数据库中抓取所有对象的数据)。 如果你不确定是否有匹配的行存在,应该使用 get()方法,它会立刻访问数据库,如果没有对应的行,会返回null
    session.get 方法, 查询立即执行 , 返回Customer类对象
    session.load 方法,默认采用延迟加载数据方式,不会立即查询,返回 Customer类子类对象 (动态生成代理对象)
* 如果 PO类使用final修饰,load无法创建代理对象,返回目标对象本身 (load效果和 get效果 相同 )

QQ图片20180315101548.png (130.46 KB, 下载次数: 9)

QQ图片20180315101548.png

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马