开发者学堂课程【Java 面试疑难点串讲5:系统架构及项目设计:延迟加载】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/28/detail/625
延迟加载
内容简介:
一、延迟加载的常见问题
二、延迟加载的注意事项
一、延迟加载的常见问题
对于这种延迟加载问题,实际上属于 Spring + Hibemate 时代的产物,这个是Hibemate 比较鸡肋的功能。
之所以说它鸡肋主要是因为有如下问题:
1、几乎所有的配置都需要打开延迟加载,否则整个的程序性能会收到严重的影响;
2、有可能会产生严重的“1+N” 查询,例如:现在一个分类下有多个新闻信息,那么现在很明显,如果此时没有打开延迟加载,就意味着如果现在有10个分类的数据,那么就会自动查询10次的子表数据,那么如果每个子的字段包含有3000篇新闻,那么最终产生的结果就是3000W条数据,而且这些数据不是直接去使用。
3、当 Spring 与 Hibemate 结合的时候就会出现有一个页面数据延迟打开的问题,也就是说希望 Session 一直到页面后才进行关闭。
二、注意事项
将 Hibemate 中的 Sssion 延迟到页面后进行关闭,那么对于整个的事务处理是
常麻烦的,而且这种操作还需要进行一个 OpenSessionInView 过滤器的配置。
正是因为这样的情况,在实际的开发过程之中,只针对于需要进行显示的数据.
例如:在查询一个雇员的时候,希望取得雇员对应的部门数据,而且很确定这个雇员只对应有一个部门的信息,那么就建议在业务层里面,取得完雇员信息之后,直接再使用 getter 方法查询该雇员所对应的部门的数据信息。
在业务层的控制是因为所有的 AOP 的切入点都是在业务层上完成的。随后到
整个页面之中就可以直接在 JSP 页面里面利用 emp 对象里面利用 emp 对象“${emp.dept.dname} ”。
对于程序的性能,基本上都出现在数据库上,而如果说用户很多,问题也会
现在数据库上,在开发的时候为了保证数据库的操作性能。
最好的做法就是:保证只是查询到所需要的数据,不需要的数据绝对不要去查,因为查询会浪费磁盘的性能,而查询的结果会占用内存,而 CPU 是通过内存读取数据的,所以如果数据量大,或者控制不合理,那么直接导致系统变慢。