Mybatis查询优化

文章讲述了作者如何将一个复杂的Mybatis查询进行优化,原本的查询由于频繁连接数据库导致效率低下,优化后将其拆分为3个独立的查询,显著减少了数据库交互次数,提高了查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

纪念我这一块非常复杂的mybatis查询可以优化成多个逻辑
这样写不仅复杂而且查询效率慢,因为要根据时间去数据库查,没一天都要查一次,连接数据库很多次

<!--获取某天的日报-->
    <select id="getDetails" resultMap="attendDetailMap">
      with leave_chiefs as (
        select count(1), grid_chief_id
        from patrol_grid_chief_attendance where state = 'LEAVE' and date = #{date}
        group by grid_chief_id
        ),
      complete_chiefs as (
          select  count(1), grid_chief_id
          from patrol_patrol_log where state = 'COMPLETE' and date = #{date}
          group by grid_chief_id
      )
       select
          pgc.id as gridChiefId,
          pgc.name as gridChiefName,
          pgc.grid_id as gridId,
          #{date} as date,
          case (select 100 from leave_chiefs lc where lc.grid_chief_id = pgc.id) when 100 then 'LEAVE' else 'ATTEND' end as state,
          case (select 100 from complete_chiefs cc where cc.grid_chief_id = pgc.id) when 100 then 'true' else 'false' end as hasComplete
        from patrol_grid_chief pgc
    </select>
 @Override
    public List<GridChiefAttendLog> getAttendLogs(LocalDate from, LocalDate to) {
   
   
        List<LocalDate> dates = Stream.iterate(from, date -> date.plusDays(1))
                .limit(ChronoUnit.DAYS.between(from, to.plusDays(1)))
                .collect(Collectors.toList());
        List<GridChiefAttendLog> gridChiefAttendLogs = patrolLogDao.getPatrolChiefs();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值