mybatise一对多关系查询时不能直接分页
来源:互联网 发布:怎么快速提升淘宝星级 编辑:程序博客网 时间:2024/03/29 00:34
在mybatise应用时候我们经常会用到collection进行一对多映射,这时候分页就有了问题。
比如A表1条记录对应B表3条记录,这时候查询就是3条记录,但是实际上我们需要的只是1条。
解决方案:
一 提供一个工具方法生成新的RowBounds
/** * mybatise一对多关系查询时不能直接分页,可以用此方法获取RowBounds对象。<br/> * 建议counts的记录数在1000以下,如果大过1000可以采取for循环里面查询子表的方案 * @param counts 分组查询的记录集合 * @param pageBean 分页对象 * @return */ public static RowBounds getGroupRowBounds(List<Integer> counts, PageBean pageBean){ int offset = PageUtil.setParameter((int) counts.size(),pageBean); int pageSize = 0; for(int i = 1;i <= counts.size();i++){ //每一条主记录对应的副表记录(多) int count = counts.get(i-1); pageSize = pageSize+count; if (offset == i){ //设置起始值 offset = pageSize; } } return new RowBounds(offset,pageSize); }
PageBean 是一个分页对象,网上类似代码很多,此处不贴出来
生成counts的参考sql写法
SELECT count(*) FROM ( SELECT t.uuid FROM t_om_advice_feedback t LEFT JOIN t_om_feedback_module_relation r ON t.uuid = r.feedback_id and r.module_id <![CDATA[ <> ]]> 0 LEFT JOIN t_om_advice_feedback_module t2 ON r.module_id = t2.uuid and r.module_id <![CDATA[ <> ]]> 0 LEFT JOIN t_om_advice_feedback_reply t3 ON t.uuid = t3.feedback_id LEFT JOIN om_track_user u ON t3.reply_dd = u.dd LEFT JOIN t_om_advice_feedback_img t4 ON t.uuid = t4.feedback_id WHERE t.feedback_dd = #{feedBackDd} )t group by t.uuid
其实就是对原来计算总数的count(*)的sql进行分组,得到一对多列表集合
二 就是不采用collection映射
查询语句改为只查询主表,然后在for循环中通过主表id将关联的副表数据查询出来。这种方法编程上比较麻烦,数据库查询次数较多,适合大量数据的时候。建议是在加上业务条件后的count(*)语句查询结果集在1000条以上时使用,因为对大数据量进行分组性能没有拆分多个小数据sql快,具体可以explain查看。
此处不张贴代码
阅读全文
0 0
- mybatise一对多关系查询时不能直接分页
- 一对多的分页查询
- sql 一对多查询分页
- 三张表 一对多 分页查询
- hibernate 一对多 分页 criteria 查询
- [NHibernate]一对多关系(关联查询)
- [NHibernate]一对多关系(关联查询)
- Django-model一对多关系查询
- MyBatis--关联关系查询--一对多--多表连接查询
- MyBatis--关联关系查询--一对多--多表单独查询
- ibatis3中直接在xml中写明一对多的关系和利用ibatis的拦截器进行SQL重组达到分页的目的
- Hibernate中criteria一对多关联查询时distinct的分页和数量问题
- mysql一对多关联查询时主表分页的处理
- mybatis 一对多分页查询数据条数不匹配解决
- jpa 中的一对多,多对一关系设置,可直接用findall方法查询出所需的数据,非常方便
- 一对多关系的多表关联查询
- hibernate中一对多关系hql条件查询
- ssm框架学习---mybatis中一对多关系的查询
- Android 蓝牙键盘快捷键
- 数据结构实验之排序五:归并求逆序数
- IT行业与风投
- JavaScript中的数组创建
- Spring Boot模板引擎
- mybatise一对多关系查询时不能直接分页
- [LeetCode-Algorithms-147] "Insertion Sort List" (2017.12.21-WEEK16)
- AsyncTask
- iOS——中使用多个Target去管理环境版本
- C# NPOI MO工具的应用(excel,ppt,doc)
- react 随手记
- node.js全局对象和全局变量
- 【重磅发布】《2017开发者调查报告》代码谱写传奇,深度揭秘中国开发者现状
- C++ 单链表基本操作