Mybatis一对多关系的分页结果数不准确的解决方法

在使用MySQL+Mybatis进行一对多关系的分页查询时,发现有时页面显示的数据条数少于预期。问题源于Mybatis在处理一对多数据时,若有重复的多部分数据,会导致数据被覆盖。例如,一个老师对应多个学生,如果有重复的学生名字,Mybatis会误认为是同一数据。解决方法包括:1) 在多的那部分数据中确保字段的唯一性,如在学生信息中增加学生编号;2) 使用Mybatis的子查询匹配,将多的部分作为单独查询,避免数据覆盖问题。
摘要由CSDN通过智能技术生成

一次工作中一个业务,要求分页查询数据,每页10条,使用MySQL+Mybatis组合,但是查出结果却出现有的页少于10条,但是直接执行SQL的确查出10条,这可真是奇了怪了,还好通过网上和讨论后确定了是Mybatis的分页逻辑的问题。
原因:Mybatis在查询一对多的数据时,如果多的那部分数据有完全相同的,那么就会覆盖之前的数据,如:一个老师会对应多个学生,如果有2个老师:老师A,老师B,3个学生:学生A,学生B,学生B,其中两个学生B是因为重名了,但每个老师和学生都有唯一的编号。外连接查询会有6条数据,但如果只返回学生姓名,那么返回的数据会少于6条,因为第二个学生B会覆盖第一个学生B的数据。

有问题的代码:

<resultMap id="query1" type="教师">
  <result column="t_name" property="tName" javaType="java.lang.String" jdbcType="VARCHAR"/>
  <result column="t_id" property="tId" javaType="java.lang.String" jdbcType=
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值