背景: 一个存在多对一的映射的表结构,比如视频和视频上传者,目前想取出最受欢迎的视频并要求显示视频的上传者的名字,传统的做法往往会存在n+1问题,对性能有些影响
在IBatis中如何做?马上进入实战
配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="specialtopic">
.................................
<resultMap id="top-Video-column1" class="moxtv.central.po.Video">
<result property="videoId" column="videoId" />
<result property="title" column="title" />
<result property="timeSpan" column="timeSpan" />
<result property="user.loginName" column="loginName" />
<result property="videoReport.viewedCount" column="viewedCount" />
</resultMap>
<statement id="getTopVideoListByColumn1" resultMap="top-Video-column1" cacheModel="getTopVideoListByColumn1-cache">
select v.videoId,v.title,v.timeSpan,tu.loginName,vr.viewedCount
from top_baby_video tbv
inner join video v on tbv.videoId=v.videoId
inner join video_report vr on v.videoId=vr.videoId
inner join tvUser tu on v.tvUserId=tu.tvUserId
</statement>
............................
</sqlMap>
我们采用多表关联的方式用一个sql取出所有数据,然后定义我们映射规则(见上面的 resultMap段),从规则中可以看出,我们将从查出来的loginName列映射到video中复杂属性user的loginName属性.这样的话,一句sql 就把所需要的 video对象完整加载了, 避免了n+1问题.
resultMap是一个非常好的咚咚,比起hibernate它或许多余,但却给了你更大的自由,来配置关系和对象之间的映射规则.而且也无需担心在使用hibernate2中多对一自动加载
分享到:
相关推荐
NULL 博文链接:https://liu400liu.iteye.com/blog/1187995
ibatis 一对多关系映射 ibatis 一对多关系映射ibatis 一对多关系映射
简单易入手,使用mysql数据库进行数据管理
Ibatis一对一映射提示,需要学习的同学请关注,谢谢。
各种系统架构图及其简介(Spring+IBatis+Struts1+Struts2+Hibernat)
ibatis n+1选择问题 的几种解决方案, 网上收集的。
强大的stuts2+ibatis+jQuery +UI + flexgrid+Json做的一个用户管理界面
springboot+mysql+ibatis完整整合案例,代码可以直接运行,适合新手入门学习,加油
NULL 博文链接:https://self4j.iteye.com/blog/906319
spring2+struts1+ibatis2spring2+struts1+ibatis2spring2+struts1+ibatis2spring2+struts1+ibatis2spring2+struts1+ibatis2spring2+struts1+ibatis2spring2+struts1+ibatis2
ibatis 用HashMap解决Ibatis未知列名和列数的查询结果的resultClass映射
struts2+spring+ibatis+mysql AOP日志管理,异常捕获 tomcat6.0+jdk1.6
是将struts2+spring3+iBATIS进行整合。
maven3+struts2+spring+ibatis,本来是用maven3+struts2+spring+hibernate但考虑到hibernate...2.struts2出现乱码的问题,解决方法:在struts.xml中加入 <constant name="struts.i18n.encoding" value="gb2312" />即可
JSF+Spring+Ibatis示例,对学习JAVA企业应用开发有巨大的帮助!
NULL 博文链接:https://xiaoye4188.iteye.com/blog/871050
struts2+spring+ibatis+oracle+分页搜索+上传附件实例!完整版!
struts2+spring+Ibatis框架包
struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2...将part2中的lib jar包放到 part1中lib中即可
velocity+ibatis+mysql+exlipse实例 velocity+ibatis+mysql+exlipse实例 velocity+ibatis+mysql+exlipse实例 velocity+ibatis+mysql+exlipse实例 velocity+ibatis+mysql+exlipse实例