同学你知道什么是量子力学吗?
今天来了个骚操作,同学们知道量子力学嘛,知道什么是量子的叠加态嘛,听说过什么是双缝干涉实验嘛。
话说有一个老外叫托马斯·杨,他在研究室作了一个实验,在一侧用一个点光源向一个墙上发射光束墙上有两个缝,在墙后面有一个屏风,屏风上出现了波纹状。
我们知道光具有波粒二象性,于是这个老外继续探索,如果一次我只发射一个光子那么他从哪一侧的缝隙过去呢。于是他就在这个缝隙的前面方了一个观测装置,用来观察光子的路径,结果发现一个确定的光子只能通过其中一侧缝隙,而墙后面的屏风也不再出现之前观察到的波纹。
这就引出了量子的叠加态,而放置观察装置的行为就叫做量子观测,在量子观测之前光子处于从上面和从下面传播的叠加态,而量子观测之后叠加态坍缩成固定的状态也就看不见光的波纹了。
我听完了这个故事之后,一拍大腿,这不就是懒加载嘛!!
别干后端,全是知识,学去吧你!!!
我们开始正式介绍懒加载,同学,假如你一个人在外面工作,自己租了一个房子,有多少人早上会叠被的。我认为应该很少,因为即便是家里面稍微乱一点,也不耽误我们打扮的漂漂亮亮的去上班。在没有人来家里做客的情况下,一天打扫一次和一个月打扫一次不会有什么区别(从表现上来看)。等有人来家里做客的时候再打扫就可以了。
这叫什么,这就叫懒!!!
所谓懒加载的含义也正是如此,在我们进行关联查询的时候,不必浪费资源加载关联表。等我们用的上的时候再把他查询出来也来得及,万一真的用不上了,那岂不是就可以偷懒了。
如何在Mybatis实现懒加载
首先我们要在Mybatis 的配置文件里把lazyLoadingEnabled设置为true
然后在Mapper.xml里要这么写
<resultMap type="Bound" id="boundMap">
<id property="id" column="id"/>
<result property="name" column="name"/>
<association property="dept" javaType="Dept" column="dept_id" select="findDeptLazy" fetchType="lazy" >
<id property="id" column="id"/>
<result property="deptName" column="dept_name"/>
</association>
</resultMap>
<select id="findUserDeptLazy" parameterType="int" resultMap="userMap">
SELECT id ,name,sex,age,oper,dept_id
FROM t_user
WHERE id = #{id}
</select>
只要注意要在Mybatis设置里开启允许懒加载,并且fetchType设置为lazy。基本就可以了。
故事的来源
今天中文跟同事侃大山的时候,提到了量子力学,什么薛定谔呀,双缝干涉实验呀。我忽然就想起了这部分内容,顺便记录下来。
这哪是Java呀,都是学问呀!!!