【第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.mzph.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…