MybatisPlus如何調(diào)用count函數(shù)
MybatisPlus調(diào)用count函數(shù)
項(xiàng)目整合了mybatisPlus時(shí),可以使用count函數(shù)做一些簡(jiǎn)單的統(tǒng)計(jì)
項(xiàng)目中遇到一個(gè)記錄統(tǒng)計(jì),由于項(xiàng)目整合過mybatisPlus,就不通過mybatis去寫sql做查詢,可通過QueryWrapper方法直接進(jìn)行查詢
調(diào)用方法
用mybatisPlus使用count聚合函數(shù)時(shí),直接調(diào)用.select方法即可,
例如:
csArchiveQueryWrapper.select("COUNT(*) as importNo");詳細(xì)server層代碼
這里我們通過 QueryWrapper.select() 進(jìn)行查詢,在傳入getMap方法,定義map接收,最后取出我們需要的 importNo 即可,由于在實(shí)體類中定義的類型為 Integer,所以做了類型轉(zhuǎn)換
代碼如下(示例):
public ArchiveRecords query(ArchiveRecordsVo vo) {
…………………………
ArchiveRecords records = baseMapper.selectOne(queryWrapper);
//查詢archive表中檔案總條數(shù)
QueryWrapper<Archive> ArchiveQueryWrapper= new QueryWrapper<>();
ArchiveQueryWrapper.select("COUNT(*) as importNo");
Map<String , Object> map = archiveService.getMap(ArchiveQueryWrapper);
System.out.println("==============>map:" + map);
Integer No = Integer.valueOf(String.valueOf(map.get("importNo")));
System.out.println("--------------->取出map中importNo:" + No);
System.out.println("--------------->取出map中importNo:" + No);
System.out.println("--------------->取出map中importNo:" + No);
records1.setImportNo(No);
System.out.println("--------------->set后新總條數(shù):" + records.getImportNo());
System.out.println("--------------->set后新總條數(shù):" + records.getImportNo());
System.out.println("--------------->set后新總條數(shù):" + records.getImportNo());
return records;
}控制臺(tái)輸出:
代碼如下(示例):
==============>map:{importNo=5}
--------------->取出map中importNo:5
--------------->取出map中importNo:5
--------------->取出map中importNo:5
--------------->set后新總條數(shù):5
--------------->set后新總條數(shù):5
--------------->set后新總條數(shù):5
注意:
在select()中自定義的sql語(yǔ)句,不需要加 from table_name,它會(huì)自動(dòng)拼接,若自己加了,則會(huì)出現(xiàn)報(bào)錯(cuò),拼接的sql語(yǔ)句將會(huì)變?yōu)椋?/p>
SELECT COUNT(*) as importNo FROM archive FROM archive
sql會(huì)多拼接一個(gè) from table_name 這里需要注意一下,需要where條件可通過 QueryWrapper.eq() 等方法實(shí)現(xiàn),可根據(jù)實(shí)際需求自行選擇
注意:
通過mybatisPlus的方法,可以快速的實(shí)現(xiàn)某些方法,不用寫xml,做層層調(diào)用,非常好用。
mybatisplus:Count()方法和groupBy組合使用的報(bào)錯(cuò)
錯(cuò)誤日志:
java org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2
錯(cuò)誤代碼示例
int studentNum = studentLackDealService.count( new LambdaQueryWrapper<StudentLackDeal>().eq(StudentLackDeal::getBatchId, batchId) .groupBy(StudentLackDeal::getAdmissionTicket));
問題分析
代碼看起來沒什么問題,是求出groupBy之后的數(shù)量,但是此時(shí)我們通過生成的sql可以看到:
SELECT COUNT(*) FROM exam_student_lack_deal WHERE del_flag = 0 AND ( batch_id = XXX )
這樣查詢出來的結(jié)果是多行數(shù)值:

而mybatis-plus的Count()方法用的是int接收,返回的確是一個(gè)list,自然而然就會(huì)報(bào)錯(cuò)了
解決方案
1. 使用 list() 接收處理,.size()獲取數(shù)量
int studentNum = studentLackDealService.list( new LambdaQueryWrapper<StudentLackDeal>().eq(StudentLackDeal::getBatchId, batchId) .groupBy(StudentLackDeal::getAdmissionTicket)).size();
2.去除groupBy 使用DISTINCT關(guān)鍵字去重
int studentNum = studentLackDealService.count(
new QueryWrapper<StudentLackDeal>().select("DISTINCT admission_ticket").lambda().eq(StudentLackDeal::getBatchId, batchId));總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SSM?Mapper文件查詢出返回?cái)?shù)據(jù)查不到個(gè)別字段的問題
這篇文章主要介紹了SSM?Mapper文件查詢出返回?cái)?shù)據(jù)查不到個(gè)別字段的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
關(guān)于springBoot yml文件的list讀取問題總結(jié)(親測(cè))
這篇文章主要介紹了關(guān)于springBoot yml文件的list讀取問題總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
mybatis xml注釋sql的注意事項(xiàng)及說明
這篇文章主要介紹了mybatis xml注釋sql的注意事項(xiàng)及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Java實(shí)現(xiàn)學(xué)生成績(jī)輸出到磁盤文件的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Java實(shí)現(xiàn)將學(xué)生成績(jī)輸出到磁盤文件的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-11-11
C語(yǔ)言實(shí)現(xiàn)矩陣運(yùn)算案例詳解
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)矩陣運(yùn)算案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08

