• 欢迎访问少将全栈,学会感恩,乐于付出,珍惜缘份,成就彼此、推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。
  • 吐槽,投稿,删稿,交个朋友,商务沟通v:ai_draw
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏少将全栈吧

mybatis association表关联与rowbounds共同使用时的异常及其解决方案

点滴 admin 8年前 (2016-06-18) 1682次浏览 已收录 0个评论 扫描二维码

按照mybatis手册中所说的,association有两种实现方式,嵌套查询和嵌套结果映射。如手册中所述,select方式会带来N+1次查询的问题,考虑到效率问题的话建议使用嵌套结果映射。但是在结合使用rowbounds进行分页的时候嵌套结果映射会报Mapped Statements with nested result mapping cannot be safely constrained by rowbounds异常。经过测试发现是rowbounds和resultmap-association之间有冲突,鱼与熊掌不可兼得的话,我想最好还是选择放弃rowbounds。毕竟可以在sql语句里面加入变量来实现分页。

解决方案:
新建一个RowBoundCapsule类,将原来的查询参数和limit、offset封装到一起,并采用如下的方式改写mapper文件:


<select id=”selectByOwner” parameterType=”int” resultMap=”topicresultmap”
resultSetType=”FORWARD_ONLY”>
select
t.tid as tid,
t.uid as tuid,
t.content as content,
t.commentcount as commentcount,
t.pptime as pptime,
u.uid as uid,
u.email as email,
u.nickname as nickname,
u.login as login,
u.pass as pass,
u.pic as pic
from topic as t LEFT JOIN user as u on t.uid = u.uid where t.uid
= #{o} limit #{offset},#{limit}
</select>
#{o}代表原来的参数。这样就可以把分页的任务交给数据库来完成了。

喜欢 (0)
[🍬谢谢你请我吃糖果🍬🍬~]
分享 (0)
关于作者:
少将,关注Web全栈开发、项目管理,持续不断的学习、努力成为一个更棒的开发,做最好的自己,让世界因你不同。
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址