【第4章】MyBatis-Plus持久層接口之Service Interface(下)

文章目錄

  • 前言
  • 一、get
    • 1. 示例(getById)
    • 2. 示例(getOne)
    • 3. 示例(getOne 不拋出異常)
    • 4. 示例(getMap)
    • 5. 示例(getObj)
  • 二、list
    • 1. 示例(list)
    • 2. 示例(list QueryWrapper 形式)
    • 3. 示例(listByIds)
    • 4. 示例(listByMap)
    • 5. 示例(listMaps)
    • 6. 示例(listMaps QueryWrapper 形式)
    • 7. 示例(listObjs)
    • 8. 示例(listObjs QueryWrapper 形式)
  • 三、page
    • 1. 示例(page)
    • 2. 示例(page QueryWrapper 形式)
    • 3. 示例(pageMaps)
    • 4. 示例(pageMaps QueryWrapper 形式)
  • 四、count
    • 1. 示例(count)
    • 2. 示例(count QueryWrapper 形式)
  • 總結


前言

書接上回,Service Interface:

  • get
  • list
  • page
  • count

一、get

// 根據 ID 查詢
T getById(Serializable id);
// 根據 Wrapper,查詢一條記錄。結果集,如果是多個會拋出異常,隨機取一條加上限制條件 wrapper.last("LIMIT 1")
T getOne(Wrapper<T> queryWrapper);
// 根據 Wrapper,查詢一條記錄
T getOne(Wrapper<T> queryWrapper, boolean throwEx);
// 根據 Wrapper,查詢一條記錄
Map<String, Object> getMap(Wrapper<T> queryWrapper);

功能描述: 根據指定條件查詢符合條件的記錄。
返回值: 查詢結果,可能是實體對象、Map 對象或其他類型。
參數說明

類型參數名描述
Serializableid主鍵 ID
WrapperqueryWrapper實體對象封裝操作類 QueryWrapper
booleanthrowEx有多個 result 是否拋出異常
Tentity實體對象

1. 示例(getById)

// 假設要查詢 ID 為 1 的用戶
User user = userService.getById(1); // 調用 getById 方法
if (user != null) {System.out.println("User found: " + user);
} else {System.out.println("User not found.");
}

生成的 SQL:

SELECT * FROM user WHERE id = 1

2. 示例(getOne)

// 假設有一個 QueryWrapper 對象,設置查詢條件為 name = 'John Doe'
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "John Doe");
User user = userService.getOne(queryWrapper); // 調用 getOne 方法
if (user != null) {System.out.println("User found: " + user);
} else {System.out.println("User not found.");
}

生成的 SQL:

SELECT * FROM user WHERE name = 'John Doe' LIMIT 1

3. 示例(getOne 不拋出異常)

// 假設有一個 QueryWrapper 對象,設置查詢條件為 name = 'John Doe',并且不拋出異常
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "John Doe");
User user = userService.getOne(queryWrapper, false); // 調用 getOne 方法
if (user != null) {System.out.println("User found: " + user);
} else {System.out.println("User not found.");
}

生成的 SQL:

SELECT * FROM user WHERE name = 'John Doe'

4. 示例(getMap)

// 假設有一個 QueryWrapper 對象,設置查詢條件為 name = 'John Doe',并將結果映射為 Map
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "John Doe");
Map<String, Object> userMap = userService.getMap(queryWrapper); // 調用 getMap 方法
if (userMap != null) {System.out.println("User found: " + userMap);
} else {System.out.println("User not found.");
}

生成的 SQL:

SELECT * FROM user WHERE name = 'John Doe' LIMIT 1

5. 示例(getObj)

// 假設有一個 QueryWrapper 對象,設置查詢條件為 name = 'John Doe',并將結果轉換為 String
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "John Doe");
Long id = userService.getObj(queryWrapper, obj -> (Long)obj); // 調用 getObj 方法
if (id != null) {System.out.println("User name found: " + id);
} else {System.out.println("User name not found.");
}

生成的 SQL:

SELECT * FROM user WHERE name = 'John Doe' LIMIT 1

注意: 只返回第一個字段的值

通過上述示例,我們可以看到 get 系列方法是如何在 Service 層進行查詢操作的,以及它們對應的 SQL 語句。這些方法提供了靈活的數據查詢方式,可以根據不同的條件進行查詢操作。

二、list

// 查詢所有
List<T> list();
// 查詢列表
List<T> list(Wrapper<T> queryWrapper);
// 查詢(根據ID 批量查詢)
Collection<T> listByIds(Collection<? extends Serializable> idList);
// 查詢(根據 columnMap 條件)
Collection<T> listByMap(Map<String, Object> columnMap);
// 查詢所有列表
List<Map<String, Object>> listMaps();
// 查詢列表
List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper);
// 查詢全部記錄
List<Object> listObjs();
// 查詢全部記錄
<V> List<V> listObjs(Function<? super Object, V> mapper);
// 根據 Wrapper 條件,查詢全部記錄
List<Object> listObjs(Wrapper<T> queryWrapper);
// 根據 Wrapper 條件,查詢全部記錄
<V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);

功能描述: 查詢符合條件的記錄。
返回值: 查詢結果,可能是實體對象、Map 對象或其他類型。
參數說明

類型參數名描述
WrapperqueryWrapper實體對象封裝操作類 QueryWrapper
Collection<? extends Serializable>idList主鍵 ID 列表
Map<String, Object>columnMap表字段 map 對象
Function<? super Object, V>mapper轉換函數

1. 示例(list)

// 查詢所有用戶
List<User> users = userService.list(); // 調用 list 方法
for (User user : users) {System.out.println("User: " + user);
}

生成的 SQL:

SELECT * FROM user

2. 示例(list QueryWrapper 形式)

// 假設有一個 QueryWrapper 對象,設置查詢條件為 age > 25
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 25);
List<User> users = userService.list(queryWrapper); // 調用 list 方法
for (User user : users) {System.out.println("User: " + user);
}

生成的 SQL:

SELECT * FROM user WHERE age > 25

3. 示例(listByIds)

// 假設有一組 ID 列表,批量查詢用戶
List<Integer> ids = Arrays.asList(1, 2, 3);
Collection<User> users = userService.listByIds(ids); // 調用 listByIds 方法
for (User user : users) {System.out.println("User: " + user);
}

生成的 SQL:

SELECT * FROM user WHERE id IN (1, 2, 3)

4. 示例(listByMap)

// 假設有一個 columnMap,設置查詢條件為 age = 30
Map<String, Object> columnMap = new HashMap<>();
columnMap.put("age", 30);
Collection<User> users = userService.listByMap(columnMap); // 調用 listByMap 方法
for (User user : users) {System.out.println("User: " + user);
}

生成的 SQL:

SELECT * FROM user WHERE age = 30

5. 示例(listMaps)

// 查詢所有用戶,并將結果映射為 Map
List<Map<String, Object>> userMaps = userService.listMaps(); // 調用 listMaps 方法
for (Map<String, Object> userMap : userMaps) {System.out.println("User Map: " + userMap);
}

生成的 SQL:

SELECT * FROM user

6. 示例(listMaps QueryWrapper 形式)

// 假設有一個 QueryWrapper 對象,設置查詢條件為 age > 25,并將結果映射為 Map
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 25);
List<Map<String, Object>> userMaps = userService.listMaps(queryWrapper); // 調用 listMaps 方法
for (Map<String, Object> userMap : userMaps) {System.out.println("User Map: " + userMap);
}

生成的 SQL:

SELECT * FROM user WHERE age > 25

7. 示例(listObjs)

// 查詢所有用戶id,并將結果轉換為 Long列表
List<Long> ids = userService.listObjs(obj -> (Long) obj); // 調用 listObjs 方法
for (Long id : ids) {System.out.println("Id is: " + id);
}

注意: 只返回第一個字段的值

生成的 SQL:

SELECT * FROM user

8. 示例(listObjs QueryWrapper 形式)

// 假設有一個 QueryWrapper 對象,設置查詢條件為 age > 25,并將結果轉換為 Long 列表
QueryWrapper<User1> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 25);
List<Long> ids = userService.listObjs(queryWrapper,obj -> (Long) obj); // 調用 listObjs 方法
for (Long id : ids) {System.out.println("Id is: " + id);
}

注意: 只返回第一個字段的值

生成的 SQL:

SELECT * FROM user WHERE age > 25

通過上述示例,我們可以看到 list 系列方法是如何在 Service 層進行查詢操作的,以及它們對應的 SQL 語句。這些方法提供了靈活的數據查詢方式,可以根據不同的條件進行查詢操作。

三、page

// 無條件分頁查詢
IPage<T> page(IPage<T> page);
// 條件分頁查詢
IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper);
// 無條件分頁查詢
IPage<Map<String, Object>> pageMaps(IPage<T> page);
// 條件分頁查詢
IPage<Map<String, Object>> pageMaps(IPage<T> page, Wrapper<T> queryWrapper);

功能描述: 分頁查詢符合條件的記錄。
返回值: 分頁查詢結果,包含記錄列表和總記錄數。
參數說明

類型參數名描述
IPagepage翻頁對象
WrapperqueryWrapper實體對象封裝操作類 QueryWrapper

1. 示例(page)

// 假設要進行無條件的分頁查詢,每頁顯示10條記錄,查詢第1頁
IPage<User> page = new Page<>(1, 10);
IPage<User> userPage = userService.page(page); // 調用 page 方法
List<User> userList = userPage.getRecords();
long total = userPage.getTotal();
System.out.println("Total users: " + total);
for (User user : userList) {System.out.println("User: " + user);
}

生成的 SQL:

SELECT * FROM user LIMIT 10 OFFSET 0

2. 示例(page QueryWrapper 形式)

// 假設有一個 QueryWrapper 對象,設置查詢條件為 age > 25,進行有條件的分頁查詢
IPage<User> page = new Page<>(1, 10);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 25);
IPage<User> userPage = userService.page(page, queryWrapper); // 調用 page 方法
List<User> userList = userPage.getRecords();
long total = userPage.getTotal();
System.out.println("Total users (age > 25): " + total);
for (User user : userList) {System.out.println("User: " + user);
}

生成的 SQL:

SELECT * FROM user WHERE age > 25 LIMIT 10 OFFSET 0

3. 示例(pageMaps)

// 假設要進行無條件的分頁查詢,并將結果映射為 Map,每頁顯示10條記錄,查詢第1頁
IPage<Map<String, Object>> page = new Page<>(1, 10);
IPage<Map<String, Object>> userPageMaps = userService.pageMaps(page); // 調用 pageMaps 方法
List<Map<String, Object>> userMapList = userPageMaps.getRecords();
long total = userPageMaps.getTotal();
System.out.println("Total users: " + total);
for (Map<String, Object> userMap : userMapList) {System.out.println("User Map: " + userMap);
}

生成的 SQL:

SELECT * FROM user LIMIT 10 OFFSET 0

官方案例IPage<User> page = new Page<>(1, 10);要修改為IPage<Map<String, Object>> page = new Page<>(1, 10);

4. 示例(pageMaps QueryWrapper 形式)

// 假設有一個 QueryWrapper 對象,設置查詢條件為 age > 25,進行有條件的分頁查詢,并將結果映射為 Map
IPage<Map<String, Object>> page = new Page<>(1, 10);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 25);
IPage<Map<String, Object>> userPageMaps = userService.pageMaps(page, queryWrapper); // 調用 pageMaps 方法
List<Map<String, Object>> userMapList = userPageMaps.getRecords();
long total = userPageMaps.getTotal();
System.out.println("Total users (age > 25): " + total);
for (Map<String, Object> userMap : userMapList) {System.out.println("User Map: " + userMap);
}

生成的 SQL:

SELECT * FROM user WHERE age > 25 LIMIT 10 OFFSET 0

通過上述示例,我們可以看到 page 系列方法是如何在 Service 層進行分頁查詢操作的,以及它們對應的 SQL 語句。這些方法提供了靈活的數據查詢方式,可以根據不同的條件進行分頁查詢操作。

四、count

// 查詢總記錄數
int count();
// 根據 Wrapper 條件,查詢總記錄數
int count(Wrapper<T> queryWrapper);//自3.4.3.2開始,返回值修改為long
// 查詢總記錄數
long count();
// 根據 Wrapper 條件,查詢總記錄數
long count(Wrapper<T> queryWrapper);

功能描述: 查詢符合條件的記錄總數。
返回值: 符合條件的記錄總數。
參數說明

類型參數名描述
WrapperqueryWrapper實體對象封裝操作類 QueryWrapper

1. 示例(count)

// 查詢用戶表中的總記錄數
long totalUsers = userService.count(); // 調用 count 方法
System.out.println("Total users: " + totalUsers);

生成的 SQL:

SELECT COUNT(*) FROM user

官方給的案例返回值是int,自3.4.3.2開始,返回值修改為long

2. 示例(count QueryWrapper 形式)

// 假設有一個 QueryWrapper 對象,設置查詢條件為 age > 25,查詢滿足條件的用戶總數
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 25);
long totalUsers = userService.count(queryWrapper); // 調用 count 方法
System.out.println("Total users (age > 25): " + totalUsers);

生成的 SQL:

SELECT COUNT(*) FROM user WHERE age > 25

通過上述示例,我們可以看到 count 方法是如何在 Service 層進行記錄數統計操作的,以及它們對應的 SQL 語句。這些方法提供了靈活的數據統計方式,可以根據不同的條件進行記錄數統計。


總結

回到頂部

建議大家使用官方推薦的版本或者穩定的版本,有些官方示例沒有及時更新,就報錯或者直接編譯過不去,建議大家仔細閱讀官方文檔或直接查看相關源碼處理流程

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36492.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36492.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36492.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AR導航技術加持,圖書館閱讀體驗智慧升級

在信息爆炸的今天&#xff0c;圖書館作為知識的寶庫&#xff0c;其藏書量和種類日益增多。然而&#xff0c;傳統的圖書館導航方式已逐漸無法滿足用戶對快速、準確定位圖書的需求。本文將探討圖書館AR地圖導航的實現原理、技術優勢、功能特點以及市場前景&#xff0c;揭示為何AR…

VS studio2019配置遠程連接Ubuntu

VS studio2019配置遠程連接Ubuntu 1、網絡配置 &#xff08;1&#xff09;獲取主機IP &#xff08;2&#xff09;獲取Ubuntu的IP &#xff08;3&#xff09;在 windows 的控制臺中 ping 虛擬機的 ipv4 地址&#xff0c;在 Ubuntu 中 ping 主機的 ipv4 地址。 ubuntu: ping…

【Linux】對共享庫加載問題的深入理解——基本原理概述

原理概述 【linux】詳解——庫-CSDN博客 共享庫被加載后&#xff0c;系統會為該共享庫創建一個結構&#xff0c;這個結構體中的字段描述了庫的各種屬性。在內存中可能會加載很多庫&#xff0c;每一個庫都用一個結構體描述。把這些結構體用一些數據結構管理起來&#xff0c;系…

WordPress Dokan Pro插件 SQL注入漏洞復現(CVE-2024-3922)

0x01 產品簡介 WordPress Dokan Pro插件是一款功能強大的多供應商電子商務市場解決方案,功能全面、易于使用的多供應商電子商務平臺解決方案,適合各種規模的電商項目。允許管理員創建一個多賣家平臺,賣家可以注冊賬戶并在平臺上創建自己的店鋪,展示和銷售自己的產品。提供…

kali下安裝使用蟻劍(AntSword)

目錄 0x00 介紹0x01 安裝0x02 使用1. 設置代理2. 請求頭配置3. 編碼器 0x00 介紹 蟻劍&#xff08;AntSword&#xff09;是一個webshell管理工具。 官方文檔&#xff1a;https://www.yuque.com/antswordproject/antsword 0x01 安裝 在kali中安裝蟻劍&#xff0c;分為兩部分&am…

Zabbix 監控系統部署

Zabbix 監控系統部署 Zabbix是一個企業級開源分布式監控解決方案&#xff0c;可監控網絡的眾多參數以及服務器、虛擬機、應用程序、服務、數據庫、網站、云等的運行狀況和完整性。 Zabbix 使用靈活的通知機制&#xff0c;允許用戶為幾乎任何事件配置基于電子郵件的警報。這允許…

java發送圖文到公眾號

這兩天接到了一個新任務&#xff0c;通過后臺管理編寫文章&#xff0c;發送到官網的同時&#xff0c;推送一份到公眾號&#xff0c;研究了一下微信的文檔&#xff0c;發現不難&#xff0c;只需要有幾個注意點就可以了。 注意&#xff1a; 微信公眾號只能訪問微信自己上傳的圖片…

STM32單片機實現串口IAP升級

一.概述 1.要實現串口IAP升級&#xff0c;首先要編寫一個bootloader程序&#xff0c;然后再寫支持IAP的app程序&#xff1b; 2.keil下bootloader的程序rom和ram設置 3.app程序要用bin文件 注&#xff1a;本文以STM32H743舉例&#xff0c;其他stm32單片機IAP升級原理類似。 …

達夢數據庫的系統視圖v$database

達夢數據庫的系統視圖v$database 基礎信息 OS版本&#xff1a; Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本&#xff1a; DM Database Server 64 V8 DB Version: 0x7000c 03134284132-20240115-215128-20081在達夢數據庫&#xff08;Dameng Database&#xf…

Java——Lambda表達式

1. 背景 Lambda表達式是JavaSE 8中一個重要的新特性。Lambda表達式允許你通過表達式來代替功能接口。 Lambda表達式就和方法一樣&#xff0c;它提供了一個正常的參數列表和一個使用這些參數的主體(body&#xff0c;可以是一個表達式或一個代碼塊)。 Lambda 表達式&#xff08;…

C# YoloV8 模型效果驗證工具(OnnxRuntime+ByteTrack推理)

C# YoloV8 模型效果驗證工具(OnnxRuntimeByteTrack推理) 目錄 效果 項目 代碼 下載 效果 模型效果驗證工具 項目 代碼 using ByteTrack; using OpenCvSharp; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using Sys…

遠程服務器配置(堡壘機samba/ssh等)

分配了新的服務器后&#xff0c;要下載代碼首先要配置ssh。有以下兩種方式&#xff1a; 拷貝原本服務器的在本地的重新生成ssh&#xff0c;再跟服務器密鑰配對&#xff08;如未備份.gitconfig&#xff0c;還需重新配置git賬號郵箱。&#xff09; ssh配置 如果是拷貝過來的.ss…

【win11】Mouse without Borders安裝問題以管理員權限安裝msi文件

【win11】Mouse without Borders安裝問題&以管理員權限安裝msi文件 Mouse without Borders安裝問題解決&以管理員權限安裝msi文件啟動Windows Installer服務以管理員權限安裝msi文件 參考文獻 Mouse without Borders安裝問題 在win11下我雙擊MouseWithoutBorders2.2.1…

nodejs使用mysql模塊自動斷開

背景 第二天早上來的時候&#xff0c;發現接口返回異常Cannot enqueue Query after fatal error 從日志看上去&#xff0c;接口是正常運行的&#xff0c;搜索一下之后發現是數據庫的問題&#xff0c;連接斷開了 原因 MySQL中有一個名叫wait_timeout的變量&#xff0c;表示操…

由監官要求下架docker hub鏡像導致無法正常拉取鏡像

問題&#xff1a;下載docker鏡像超時 error pulling image configuration: download failed after attempts6: dial tcp 202.160.128.205:443: i/o timeout解決辦法&#xff1a;配置daemon.json [rootbogon aihuidi]# cat /etc/docker/daemon.json {"registry-mirrors&qu…

java springboot過濾器

在Spring Boot應用中添加自定義過濾器&#xff0c;可以通過實現Filter接口或繼承OncePerRequestFilter類來創建過濾器&#xff0c;并使用FilterRegistrationBean將其注冊到Spring容器中。 以下是一個簡單的示例&#xff1a; 1. 創建過濾器類 首先&#xff0c;創建一個實現Fil…

C++基礎語法:類構造函數

前言 "打牢基礎,萬事不愁" .C的基礎語法的學習 引入 類是實現面向對象思想的主要方法.前面提到:類是函數的變種,類可以通過調用靜態方法或者成員函數來實現邏輯.多數情況下使用成員函數.構造函數是生成類對象成員的必須條件,對此做一些構造函數的歸納 構造函數的目…

【日志消息類的編寫】

日志消息類編寫 由于上篇的代碼比較簡單&#xff0c;今天就多寫兩段代碼順便把日志消息類編寫完成。 這個類的實現就是&#xff1a;什么時間&#xff0c;哪個線程&#xff0c;哪個文件的哪一行&#xff0c;發生了什么等級的日志&#xff0c;日志機器名字是什么&#xff0c;日…

20240628 每日AI必讀資訊

&#x1f4da; Hugging Face 推出新版開源大模型排行榜&#xff0c;中國模型 Qwen-72B 奪冠 - 阿里Qwen-2-72B指令微調版本問鼎全球開源大模型排行榜榜首 - Llama-3-70B 微調版本排名第二&#xff0c;而 Mixtral-8x22B 微調版本位居第四。 - 另外&#xff0c;微軟的 Phi-3-M…

三種分布式鎖實現方式

目錄 1、數據庫自增 2、Redis自增 3、Zookeeper 4、其他 4.1、雪花算法 4.2、Tinyid 4.3、Leaf 4.4、數據庫號段 1、數據庫自增 利用數據庫表的自增特性&#xff0c;或主鍵唯一性&#xff0c;實現分布式ID REPLACE INTO id_table (stub) values (’a‘) ; SELECT LA…