文章目錄
- 前言
- 一、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 對象或其他類型。
參數說明:
類型 | 參數名 | 描述 |
---|---|---|
Serializable | id | 主鍵 ID |
Wrapper | queryWrapper | 實體對象封裝操作類 QueryWrapper |
boolean | throwEx | 有多個 result 是否拋出異常 |
T | entity | 實體對象 |
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 對象或其他類型。
參數說明:
類型 | 參數名 | 描述 |
---|---|---|
Wrapper | queryWrapper | 實體對象封裝操作類 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);
功能描述: 分頁查詢符合條件的記錄。
返回值: 分頁查詢結果,包含記錄列表和總記錄數。
參數說明:
類型 | 參數名 | 描述 |
---|---|---|
IPage | page | 翻頁對象 |
Wrapper | queryWrapper | 實體對象封裝操作類 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);
功能描述: 查詢符合條件的記錄總數。
返回值: 符合條件的記錄總數。
參數說明:
類型 | 參數名 | 描述 |
---|---|---|
Wrapper | queryWrapper | 實體對象封裝操作類 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 語句。這些方法提供了靈活的數據統計方式,可以根據不同的條件進行記錄數統計。
總結
回到頂部
建議大家使用官方推薦的版本或者穩定的版本,有些官方示例沒有及時更新,就報錯或者直接編譯過不去,建議大家仔細閱讀官方文檔或直接查看相關源碼處理流程