当前位置: 首页> 汽车> 时评 > 【第4章】MyBatis-Plus持久层接口之Service Interface(下)

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

时间:2025/8/2 20:51:29来源:https://blog.csdn.net/qq_44824164/article/details/139937890 浏览次数: 1次

文章目录

  • 前言
  • 一、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 语句。这些方法提供了灵活的数据统计方式,可以根据不同的条件进行记录数统计。


总结

回到顶部

建议大家使用官方推荐的版本或者稳定的版本,有些官方示例没有及时更新,就报错或者直接编译过不去,建议大家仔细阅读官方文档或直接查看相关源码处理流程

关键字:【第4章】MyBatis-Plus持久层接口之Service Interface(下)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: