您当前的位置: 首页 >  mybatis

qq_34412985

暂无认证

  • 1浏览

    0关注

    1061博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

mybatis一对多及分页可能存在的问题即关联查询分页问题,嵌套的list中数量对不上

qq_34412985 发布时间:2018-12-19 20:18:01 ,浏览量:1

项目中遇到了一个小问题,在此记录下,方便以后代码复用并且能快速排查这个小问题。

需求如下:评论和回复是一对多的关系,并且根据评论进行分页查询,至于回复数量不做限制,有多少就查多少。

存在问题:由于两张表是用连接查询,所以对于同一条评论存在多条回复的情况,那么用sql查询出来的数量应该是由回复数量决定的。而映射到java集中的数量却是由评论来决定,多条回复只是作为评论的一个属性而已。所以在mysql中直接使用limit可能会造成sql和java两边的数据不一致。

其中的column是sql中查询字段,property是javaBean属性字段。replyList就是评论中回复列表字段,是一个集合。

 

亲测子查询有效

select column_name,(select count(distinct ticket.id) from mac_ticket ticket where ticket.ticket_type_cd=mtt.code)totalTicket,(select count (case when ticket.customer_cd is not null or ticket.out_customer_cd is not null then ticket.id end)from mac_ticket ticket where ticket.ticket_type_cd=mtt.code)receiveSum,(select count (case when ticket.activity_id is not null  then ticket.id end)from mac_ticket ticket where ticket.ticket_type_cd=mtt.code)publishSum,(select count (case when ticket.verification=1  then ticket.id end)from mac_ticket ticket where ticket.ticket_type_cd=mtt.code)receiveSum,(select ifnull (sum(ifnull(mtg.quantity,0)),0)from mac_ticket_group mtg where mtg.ticket_type_cd=mtt.code)preLockSum from  mac_ticket_type mtt left mac_ticket_type_service  mtts on mtt.code=mtts.ticket_type_cd where mtt.delete_flag=0

and mtt.code in(select temp.code from (

select code from mac_ticket_type mtt where mtt.delete_flag=0

limit #{pageBean.offset},#{pageBean.size} )

as temp)

总结:

1. in不能和limit在一个语句中使用,否则报错

This version of Mysql dose't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'应加临时表查询;

2. 临时表查询时和主查询的条件要一样,,否则查询出数据不对;

3. 条件中有foreach的item的名称不要和collection的名称一样,否则报错:

Error evaluating expression 'orgCds'.Return value was ont iterable.

 

#{id,jdbcType=VARCHAR}

4.统计数时候count是单个的,可以在结果部分select count(*)from table,这样会很慢

5.ifnull可以去掉查出来的结果为null

关注
打赏
1653291990
查看更多评论
立即登录/注册

微信扫码登录

0.0448s