Mybatis的延迟加载

来源:互联网 发布:js 同时满足两个条件 编辑:程序博客网 时间:2024/06/05 22:56

  前边我们讲过了mybatis中的高级查询--关联查询。关联查询主要有三种方式,分别是一对一查询,一对多查询,多对多查询。其中一对一需要在resultMap节点中使用子节点assocaition节点;一对多关联查询需要在resultMap节点中使用collection节点;多对多就需要将上述的assocaition和collection节点一起使用。同时,我们在讲关联查询的时候,需要明确注意的是查询节点的返回值类型的选取,即resultMap和resultType一般当我们对查询结果没有特殊要求的时候选取resultType最为方便,当对执行SQL之后的查询结果有特殊要求的时候或者查询结果和POJO类属性不对照的时候,我们就要使用resultMap,特殊要求可以指:一对多中的将多条关联记录映射到POJO类中的list属性中,等等

  今天我们来讲一讲延迟加载。

  我们在Hibernate中已经学习过了延迟加载,即先执行简单查询,当需要关联查询时再去执行关联查询。好处是:提高了访问数据库的性能,减少了数据库的压力。因为单标查询要比关联查询速度更快。

  Mybatis也是有延迟加载的。但是仅仅是在resultMap返回类型的association和collection节点在才可以设置开启延迟加载的内容。而且我们需要在全局配置文件中设置两个参数,lazyLoadingEnable=true--将程序的延迟加载的功能打开--aggressiveLazyLoading=false--并采用消极加载的方式来延迟加载。

  具体的做法就是需要在mapper.xml中定义两个SQL来分别指明当前statement的SQL和关联的延迟加载的statement的SQL.

  其中关联的statement需要在resultMap中的assocaition或者collecttion中指明并且需要指明关联查询的字段是主查询的哪个字段即可。