MyBatis-plus聚合查詢、表關(guān)聯(lián)、條件更新實踐
1、聚合查詢
統(tǒng)計預(yù)約數(shù)量,返回數(shù)量 > 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、表關(guān)聯(lián)查詢
預(yù)約表BookArange關(guān)聯(lián)復(fù)本表BookCopy,查詢可以預(yù)約的書籍,逐個發(fā)出預(yù)約取書通知。
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") // 預(yù)約中
;
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、條件更新
書刊下架,將已歸還、可借閱狀態(tài)的書刊狀態(tài)更新為已下架狀態(tài)。
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("下架失敗,請檢查書刊條碼、上架狀態(tài)");
}輸出查詢sql日志
UPDATE bl_book_copy SET takeup_id = ?, status = ? WHERE deleted = 0 AND (book_no IN (?) AND status IN (?, ?)) AND tenant_id = 1
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- Mybatis-Plus多表關(guān)聯(lián)查詢的使用案例解析
- mybatis-plus多表關(guān)聯(lián)查詢功能的實現(xiàn)
- 使用Mybatis-plus更新null字段的問題分析及解決過程
- MyBatis-Plus中的更新操作方式(通過id更新和條件更新)
- mybatis-plus根據(jù)任意字段saveOrUpdateBatch更新插入的方法實現(xiàn)
- MyBatis-Plus updateById方法更新不了空字符串/null的問題及解決
- MyBatis-Plus 默認(rèn)不更新null的4種方法
- Mybatis-Plus更新操作時遇到的問題及解決方法
- MyBatis-Plus解決字段不更新為null的六大解決方案
相關(guān)文章
淺談升級Spring Cloud到Finchley后的一點(diǎn)坑
這篇文章主要介紹了淺談升級Spring Cloud到Finchley后的一點(diǎn)坑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10
淺談javaSE 面向?qū)ο?Object類toString)
下面小編就為大家?guī)硪黄獪\談javaSE 面向?qū)ο?Object類toString)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06
spring-boot-plus V1.4.0發(fā)布 集成用戶角色權(quán)限部門管理(推薦)
這篇文章主要介紹了spring-boot-plus V1.4.0發(fā)布 集成用戶角色權(quán)限部門管理,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值需要的朋友可以參考下2019-11-11
Java實現(xiàn)發(fā)送HTML內(nèi)容并帶附件的電子郵件
這篇文章主要為大家詳細(xì)介紹了如何使用Java實現(xiàn)發(fā)送HTML內(nèi)容并帶附件的電子郵件,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下2025-01-01
JDK17在Windows安裝及環(huán)境變量配置超詳細(xì)的教程
這篇文章主要介紹了JDK17在Windows安裝及環(huán)境變量配置超詳細(xì)的教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-11-11
Java Mybatis中的 ${ } 和 #{ }的區(qū)別使用詳解
這篇文章主要介紹了Mybatis中的 ${ } 和 #{ }的區(qū)別使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
JAVA使用JDBC連接oracle數(shù)據(jù)庫的詳細(xì)過程
JDBC是一種用于執(zhí)行SQL語句的Java API,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成,下面這篇文章主要給大家介紹了關(guān)于JAVA使用JDBC連接oracle數(shù)據(jù)庫的詳細(xì)過程,需要的朋友可以參考下2023-05-05

