解决Ibatis一对多映射n+1问题 ----ibatis2.2.0版本
来源:互联网 发布:数组是一种原生类 编辑:程序博客网 时间:2024/06/09 14:16
解决Ibatis一对多映射n+1问题
背景: 一个存在一对多的逻辑关系,比如视频和视频标签(严格来讲是多对多的关系),目前想取出一些视频和该视频包含的标签,传统的做法往往会存在n+1问题,对性能有些影响
在IBatis中如何做?马上进入实战
配置文件如下:
<sqlMap namespace="search">
<resultMap id="video-map" class="xx.index.dataset.VideoVO" groupBy="videoId">
<result property="videoId" column="videoId" />
............................
<result property="tagList" resultMap="search.tag-map" />
</resultMap>
<resultMap id="tag-map" class="java.util.HashMap">
<result property="tagName" column="tagName" />
</resultMap>
<statement id="query" resultMap="video-map" parameterClass="xx.index.dataset.DataSetVO" >
select v.videoId as videoId,
.............
vtg.name as tagname,
............
from video v
inner join videotagrel vtgrel on v.videoId=vtgrel.videoId
inner join videotag vtg on vtgrel.tagId=vtg.tagId
...........
</statement>
........
</sqlMap>
<resultMap id="video-map" class="xx.index.dataset.VideoVO" groupBy="videoId">
<result property="videoId" column="videoId" />
............................
<result property="tagList" resultMap="search.tag-map" />
</resultMap>
<resultMap id="tag-map" class="java.util.HashMap">
<result property="tagName" column="tagName" />
</resultMap>
<statement id="query" resultMap="video-map" parameterClass="xx.index.dataset.DataSetVO" >
select v.videoId as videoId,
.............
vtg.name as tagname,
............
from video v
inner join videotagrel vtgrel on v.videoId=vtgrel.videoId
inner join videotag vtg on vtgrel.tagId=vtg.tagId
...........
</statement>
........
</sqlMap>
我们采用多表关联的方式用一个sql取出所有数据,然后定义我们映射规则(见上面的 resultMap段),从规则中可以看出,我们将查出来的结果根据videoId进行分组,然后相同videoId的标签会归入video的tagList,最后你会得到一个 video列表,其中每个video又包含一个相关的标签列表,整个过程一句sql搞定 避免了n+1问题
- 解决Ibatis一对多映射n+1问题 ----ibatis2.2.0版本
- 解决Ibatis一对多映射n+1问题
- 解决Ibatis一对多映射n+1问题
- ibatis 对象一对多解决N+1问题
- 解决IBatis中的多对一映射n+1问题
- 解决IBatis中的多对一映射n+1问题
- ibatis2中的一对多和一对一映射
- ibatis2中的一对多和一对一映射
- ibatis一对多映射
- iBatis2学习笔记:一对多映射(双向)
- iBATIS一对多/多对多N+1问题解决方案
- iBATIS一对多/多对多N+1问题解决方案。
- Ibatis/MyBaits 1:N 一对多关系 处理
- ibatis一对多关系映射技巧
- ibatis 实体映射(一对多)
- iBATIS一对多配置问题
- 1011--映射一对多关联关系(.单向 n-1)
- 1012--映射一对多关联关系(.双向 1-n)
- 步入J2EE架构和过程(1)
- 步入J2EE架构和过程(2)
- xhtml的结构标签
- Install Boost Library for VC8
- J2EE配置指南
- 解决Ibatis一对多映射n+1问题 ----ibatis2.2.0版本
- linux find命令
- 部署 Windows Vista 需要了解的十大事项
- OldHawk TODO on Unrealircd
- 类模版偏特化示例
- 06-11-15-学习计划-Hibernate入门,Depends on Ant、XDoclet.
- Oracle OCP认证离你有多远?
- [转]web开发过程中要注意的问题(一)
- 教您给 Windows 目录加口令的特殊方法