`
ko8e
  • 浏览: 51879 次
  • 性别: Icon_minigender_1
  • 来自: 龙岩
社区版块
存档分类
最新评论

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

 
阅读更多
按照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}代表原来的参数。这样就可以把分页的任务交给数据库来完成了。

分享到:
评论
1 楼 qq184234675 2015-01-16  
脱裤子放屁,直接给方法加 start,limit俩参数不就行了
oracle的话是 begin和end

但是最关键的,你怎么不说说rowbounds和association为啥不能在一个查询里用啊

相关推荐

    MyBatis面试专题及答案 (1).docx

    MyBatis是一个优秀的持久层框架,它允许开发者自定义SQL、存储过程以及高级映射。这个框架的主要目标是简化数据库操作,...而Hibernate提供了一种全面的对象关系映射解决方案,更适合对数据库操作要求较低的复杂应用。

    MyBatis简介.docx

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及...而 Hibernate 提供了一套完整的对象关系映射解决方案,包括自动管理数据库事务、缓存和对象关系的加载,但在某些复杂场景下可能不如 MyBatis 灵活。

    mybatis面试题专项

    MyBatis允许开发者自由定制SQL,而Hibernate则更注重对象关系映射的自动化,提供完整的ORM解决方案。MyBatis更适合对SQL有高度控制需求的项目,而Hibernate则适合快速开发,对SQL不需过多干预的场景。

    MyBatis 36道面试题和答案.docx

    MyBatis是一个强大的持久层框架,它允许开发者自定义SQL、存储过程以及...而Hibernate则提供了一种更全面的对象关系映射解决方案,自动管理数据库交互,包括对象的懒加载和级联操作,但可能会牺牲一些性能和SQL灵活性。

    springmybatis

    mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action...

    MyBatis面试专题.pdf

    - **ORM程度**:MyBatis需要程序员手动编写SQL语句,而Hibernate则提供了更为完整的ORM解决方案,包括对象关系映射、事务管理、缓存管理等功能; - **灵活性**:MyBatis提供更高的灵活性,适用于对SQL有特殊需求的...

    MyBatis面试专题及答案.pdf

    8. **MyBatis 与 Hibernate 的差异**:MyBatis 更灵活,SQL 由开发者自由控制,适合复杂的 SQL 操作,而 Hibernate 提供了对象关系映射的全套解决方案,包括自动加载关联对象,但可能牺牲性能。MyBatis 的性能通常...

Global site tag (gtag.js) - Google Analytics