mybatis创建一对多映射,解决分页查询时total数,子查询传值的问题

最新更新解决分页查询的一对多,总条数对不上的原因

第一种方法,联合查询

在实体类先声明一个对多的集合对象

然后在mapper创建一对多的映射关系,<collection 是一对多;<association 是一对一,注意一对多必须放在最下面,如果多个一对多,都放在最下面即可

正常写语句,返回的时候是resultMap,注意必须有一对多中“一”的数据,也就是下面的s.*,不然没法映射

最后出来的效果就是

第二种方法:子查询的方式

 2022.10

最近项目又用到mybatis,再次使用一对多的查询时,发现会影响分页的bug,修改一对多映射

老样子,先在实体类创建两个  关联的实体集合

mapper.xml的一对多有改变,具体对比上面

 oftype 是要返回 ”多“的数据类型,select是查询的id,需要注意的是column,这里指的是要关联的表的值,对应的是我下方#{id}的值,这也是用来对应关系的,

最后就是正常写一个select查询主表的语句,这个时候不用关联其他表

 

 

 这样的一对多查询,分页查询的total就是正常的了

2022.11

最近用这个新的一对多方式,又遇到一个奇葩问题,那就是子查询的传值问题,话不多说上图和解决办法

这是我主查询,单表的查询,但是我要把startDate 和 endDate 传入 一对多的多,也就是子查询里面当条件

<collection  设置 column的条件  {id=id这是主查询和子查询连接的id,startDate主查询用不到,给子查询当条件用}

 case when ('${startDate}' !='')then '${startDate}' else '' end  as startDate,
 case when ('${endDate}' !='')then '${endDate}' else '' end  as endDate

 总结一下

第一种方法:

sql直接关联查询,然后结果集通过resultMap的collection映射

优点:条件过滤很方便

缺点:很明显,先关联查询,后映射,分页查询就是致命的

第二种方式:

通过resultMap中collection标签的select属性去执行子查询,所需参数通过column传递

优点:分页和普通查询都能满足,超级方便,主表的条件也很ok

缺点:就是查询条件要放到”多“的这张表上的时候,子表条件查询有点复杂

okkkk,搞清楚了就继续加油吧

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随风奔跑的十八岁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值