MyBatis-plus聚合查询、表关联、条件更新实践

 更新时间:2026年05月15日 09:59:08   作者:zhengxianyi515  
文章描述了一个图书馆系统的操作流程,首先查询预约数量,其次关联查询可预约书籍并发出通知,最后更新书刊状态为下架,输出每步操作的SQL日志

1、聚合查询

统计预约数量,返回数量 > 0的记录:

QueryWrapper<BookArangeDO> arangeQuery = new QueryWrapper<BookArangeDO>()
        .eq("status", "1")
        .in("book_no", bookNoList)
        .select("book_no", "count(book_no) as arange_count")
        .groupBy("book_no").having("arange_count > {0}", 0)
        ;
List<Map<String, Object>> mapList = bookArangeMapper.selectMaps(arangeQuery);
Map<String, Integer> countMap = new HashMap<>();
mapList.forEach(bookArangeDO -> {
    countMap.put(bookArangeDO.get("book_no").toString(), Integer.valueOf(bookArangeDO.get("arange_count").toString()));
});

输出查询sql日志

SELECT book_no, count(book_no) AS arange_count 
FROM bl_book_arange 
WHERE deleted = 0 AND (status = ? AND book_no IN (?, ?)) AND tenant_id = 1 
GROUP BY book_no HAVING arange_count > ?

2、表关联查询

预约表BookArange关联复本表BookCopy,查询可以预约的书籍,逐个发出预约取书通知。

MPJLambdaWrapperX<BookArangeDO> queryWrapperX = new MPJLambdaWrapperX<>();
queryWrapperX
        .select(BookArangeDO::getBookNo, BookArangeDO::getTenantId)
        .leftJoin(BookCopyDO.class, BookCopyDO::getBookNo, BookArangeDO::getBookNo)
        .eq(BookCopyDO::getStatus, "3")    // 可借阅
        .eq(BookArangeDO::getStatus, "1")  // 预约中
        ;
Page<Map<String, Object>> page = new Page<>(1, 10);
page = bookArangeMapper.selectJoinMapsPage(page, queryWrapperX);

输出查询sql日志

SELECT t.book_no,t.tenant_id
FROM bl_book_arange  t    
LEFT JOIN bl_book_copy t1 ON (t1.book_no = t.book_no)  
WHERE  t.deleted=0 AND t1.deleted=0
AND (t1.status = ? AND t.status = ?)

3、条件更新

书刊下架,将已归还、可借阅状态的书刊状态更新为已下架状态。

        LambdaUpdateWrapper<BookCopyDO> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.in(BookCopyDO::getBookNo, bookNos)
                .in(BookCopyDO::getStatus, "6", "3")   // 已归还、可借阅
                .set(BookCopyDO::getTakeupId, SecurityFrameworkUtils.getLoginUserId())
                .set(BookCopyDO::getStatus, '7');       // 已下架
        int n = bookCopyMapper.update(updateWrapper);
        if(n !=bookNos.length) {
            throw new ServiceException("下架失败,请检查书刊条码、上架状态");
        }

输出查询sql日志

UPDATE bl_book_copy SET takeup_id = ?, status = ? 
WHERE deleted = 0 AND (book_no IN (?) AND status IN (?, ?)) AND tenant_id = 1

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 浅谈升级Spring Cloud到Finchley后的一点坑

    浅谈升级Spring Cloud到Finchley后的一点坑

    这篇文章主要介绍了浅谈升级Spring Cloud到Finchley后的一点坑,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • 浅谈javaSE 面向对象(Object类toString)

    浅谈javaSE 面向对象(Object类toString)

    下面小编就为大家带来一篇浅谈javaSE 面向对象(Object类toString)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • spring-boot-plus V1.4.0发布 集成用户角色权限部门管理(推荐)

    spring-boot-plus V1.4.0发布 集成用户角色权限部门管理(推荐)

    这篇文章主要介绍了spring-boot-plus V1.4.0发布 集成用户角色权限部门管理,本文给大家介绍的非常详细,具有一定的参考借鉴价值需要的朋友可以参考下
    2019-11-11
  • Java实现发送HTML内容并带附件的电子邮件

    Java实现发送HTML内容并带附件的电子邮件

    这篇文章主要为大家详细介绍了如何使用Java实现发送HTML内容并带附件的电子邮件,文中的示例代码讲解详细,有需要的小伙伴可以参考一下
    2025-01-01
  • JDK17在Windows安装及环境变量配置超详细的教程

    JDK17在Windows安装及环境变量配置超详细的教程

    这篇文章主要介绍了JDK17在Windows安装及环境变量配置超详细的教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-11-11
  • Java编程基本概念

    Java编程基本概念

    本文主要介绍了Java编程的基本概念,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • spring缓存cache的使用详解

    spring缓存cache的使用详解

    这篇文章主要介绍了spring缓存cache的使用详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • JAVA使用Ip2region获取IP定位信息的操作方法

    JAVA使用Ip2region获取IP定位信息的操作方法

    这篇文章主要介绍了JAVA使用Ip2region获取IP定位信息,ip2region - 是国内开发者开发的离线IP地址定位库,针对国内IP效果较好,国外的部分IP只能显示国家,对java获取IP定位信息操作过程感兴趣的朋友一起看看吧
    2022-05-05
  • Java Mybatis中的 ${ } 和 #{ }的区别使用详解

    Java Mybatis中的 ${ } 和 #{ }的区别使用详解

    这篇文章主要介绍了Mybatis中的 ${ } 和 #{ }的区别使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • JAVA使用JDBC连接oracle数据库的详细过程

    JAVA使用JDBC连接oracle数据库的详细过程

    JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成,下面这篇文章主要给大家介绍了关于JAVA使用JDBC连接oracle数据库的详细过程,需要的朋友可以参考下
    2023-05-05

最新评论