Mybatis 级联介绍

来源:互联网 发布:c语言中mod是表示什么 编辑:程序博客网 时间:2024/05/23 20:35

级联存在着三种对应关系:一对一关、一对多关系、多对多关系
Mybatis中的级联分为:associationcollectiondiscriminator
association代表着一对一的关系,collection对应的一对多关系,discriminator代表着鉴别器。允许你根据不同的条件去关联不同的结果集。这点和java中的switch很像。具体的用法这里就不放出例子了。


级联的优势在于能够很快捷的获取对应的数据,但是级联会增加sql的复杂度,不利于别人的理解,同时最严重的是会带来很严重的性能问题。因此考虑到性能问题,应该考虑采用延迟加载的功能。延迟加载的意义在于开始的时候我并不进行级联数据的查询,而是当你使用到了它之后(访问了相关的get方法,内部原理是通过Java的动态代理实现的)才进行相应的查询。达到按需取数据的目的。

Mybatis配置中具有两个全局参数:lazyLoadingEnabled、aggressiveLazyLoading。lazyLoadingEnabled的含义是是否开启延迟加载功能 默认是false。aggressiveLazyLoading含义是是否按层级加载。默认是true。如果要使用这两个参数 只需要在mybatis的配置文件的节点下加入并设置对应的name、value即可。但是这两个的参数设置是全局的控制,如果我们对某个POJO对象的有些属性需要延迟加载,有些又需要及时加载的话,那么如何控制呢。
我们可以在association和collection两个元素里加入属性fetchType来配置局部的延迟加载功能。fetchType具有两个可选值:lazy和eager。
如果你没有配置这两个属性,则使用的是全局的配置,如果你使用了这个属性,则会覆盖全局的配置。lazy代表的就是延迟加载了,反之 eager代表的就是及时加载。这样的话我们就可以很方便的对各个属性进行控制。

1 0