前言

最近在做一个需求,简单来讲就是有两个表,一个公司表,一个公司类型表,一个公司有多个类型,这是一对多的关系,需要连接查询处理。但在用了公司框架分页的时候,会把整个连接查询结果作为总条数返回,导致分页不对。

**思路:**后来使用子查询解决了这个问题,也就是在主表查询中,只查询主表的字段,在子查询中再查询连表的字段。最后对主表去重一下,查出来的结果再分页就没有问题了。

一、表结构

一对多的关系,这里举了最简单的例子,公司表company只有主键id和公司中文名cn_name。公司类型表有主键id,公司id,和类型名称。

这里测试,一个公司对应两个公司类型,如果直接通过连接查询,结果如下:

二、预期效果

这样查出来的总行数是4,如果直接分页,那肯定是不对的,因为我们想要的返回结果如下:

只有两条记录,公司的类型表中只返回类型名称,用数组形式返回。

三、返回响应体

返回响应体的类如下:

List<String> compTypes返回公司类型的数据。

mybatis子查询如下:

 <select id="selectTypes" resultType="string">SELECT type from company_type where company_id = #{companyId}</select><resultMap id="queryCompanyMap" type="com.study.mybatis.resp.CompanyResp"><result column="id" property="id" /><result column="cn_name" property="cnName" /><collection property="compTypes"ofType="list"column="{companyId=id}"select="selectTypes"javaType="java.util.ArrayList" /></resultMap><select id="queryCompanyByPage" resultMap="queryCompanyMap">SELECT distinct t1.id,t1.cn_nameFROM company t1LEFT JOIN company_type t2on t1."id" = t2.company_id</select>

条件查询等可以在queryCompanyByPage中做,用collection来表示一对多。

四、小结

关键在于不要在主查询中把连表的字段查出来,而是在一对多的<collection>中再查连表字段。

Mybatis一对多分页问题,采用子查询相关推荐

  1. mybatis 一对多关系映射 select子查询 只有一条数据 解决方案

    一般一对多 多的那个会是联合主键 所以要这么设置 <resultMap id="CfdMap" type="com.sxq.cloud.entity.ZhyyB2C ...

  2. Oracle分页为什么采用三层查询

    Oracle分页为什么采用三层查询 原始表数据如下 ID NAME AGE ADDRESS 1 嗨一 18 北京 2 王二 20 南京 3 麻子 22 西凉 4 太君 24 东京 5 华子 26 纽约 ...

  3. Mybatis一对多分页查询问题

    一.背景引入 Mybatis提供了处理结果集的标签,其中子标签collection可以处理1对多的映射 <resultMap><collection></collecti ...

  4. PageHelper在对mybatis一对多分页不正确的问题

    1. 其实这个问题仔细一想也没什么 1.首先使用PageHelper单表没有问题 2.连表查询不牵扯到一对多也没有问题 3.连表查询牵扯到一对多分页错误: 比如:查第一页,查询10条数据,却只得到三条 ...

  5. Mybatis一对多,多对一嵌套查询的返回

    我们有时候查询需要一带多,多带一的信息,举个一对多的例子:我们要查询所有的订单,顺便还能把对应的订单里面的多条详情(比如对应的商品,商品价格等)也带出来. 类似于这样 orderNo, orderTi ...

  6. Mybatis一对多及多对多映射查询

    1.数据库准备工作 --删除表 drop table SelectiveInfo; drop table StudentInfo; drop table ClassInfo; drop table T ...

  7. mybatis一对多关联查询两种方式

    mybatis一对多关联查询两种方式 前提: 方式一: 方式二: 前提: 现在有两张表,学生表跟教师表,一个教师对应多个学生 教师表: CREATE TABLE `teacher` (`id` int ...

  8. mybatis 一对多 两种查询方式

    注意事项:  如果是多表 例如有A表,B表  A是多端,B是一端 那么就要在B端声明A端的集合 必须 上代码: 我使用的是java语言,先看实体类 这是单表的一对多 多表跟单表逻辑是一致 public ...

  9. sharding子查询_ShardingSphere 分页

    分页性能 性能瓶颈 查询偏移量过大的分页会导致数据库获取数据性能低下,以MySQL为例: SELECT * FROM t_order ORDER BY id LIMIT 1000000, 10 这句S ...

最新文章

  1. Ubuntu apt-get install、apt-get -f install、apt-get --purge remove、apt-get update、apt-get upgrade、
  2. MySQL 代码结构与基本流程
  3. 曝贾扬清第二跳,加入阿里!达摩院或将承载中国下一个AI愿景?
  4. PacificA 一致性协议解读
  5. 使用Memcached实现Session共享
  6. 2016年IoT和新的逃逸技术将会引领威胁态势
  7. 盘点大型分布式网站术语
  8. Dapr + .NET 实战(十-终篇)K8S运行Dapr
  9. Java的Gradle依赖关系,使用编译还是实现?
  10. bzoj1699[Usaco2007 Jan]Balanced Lineup排队
  11. realme Pad通过认证:搭载7100mAh大容量电池
  12. 是时候拥有一个你自己的命令行工具了
  13. JQuery 1.8.3对IE9兼容问题getAttribute
  14. 编译安装nginx并修改版本头信息—参考实例
  15. 电驴(easyMule)自动关机工具
  16. 《算法分析与设计(第5版)》——王晓东 - 学习记录 / 期末复习
  17. php 条件求和,Excel条件求和公式是什么
  18. 统计分析/PCA,PCoA,NMDS等的区别
  19. NCCL下载及安装教程
  20. 字节健康摸着百度过河

热门文章

  1. python浮点数保留两位小数_python保留两位小数
  2. 每天不知道吃啥?Python来告诉你!生成菜谱,每天吃啥不用愁
  3. JAVA租房管理系统计算机毕业设计Mybatis+系统+数据库+调试部署
  4. 机器学习模型训练步骤
  5. 如何优化详情页快速促成转化[淘宝 ID 获取商品接口]
  6. Android购物软件制作(毕业设计)
  7. Hugging Face PEFT 调优实战附代码
  8. Qt多线程TCP服务器
  9. 2022年重庆二级建造师市政公用工程《城市桥梁工程质量检查与检验》每日练习及答案
  10. 架构师面试专题-23种设计模式