Mybatis plus:IService接口
一、介绍
在MybatisPlus框架中,IService接口扮演着重要的角色。作为一个通用的服务接口,IService定义了一系列方法,包括查询、插入、更新、删除等。这些方法的定义使得在服务层进行数据库操作变得更为便捷和高效。
- IService 接口是一个泛型接口,定义了一组通用的基础方法,包括常见的增删改查操作。例如,它提供了插入数据、根据主键更新数据、根据主键删除数据、根据主键查询数据等方法的签名。用户可以根据自己的需求和业务逻辑在自定义的服务接口中继承 IService 接口,并实现其中的方法。用法:
public interface UserService extends IService<User> {}
- ServiceImpl 类是 IService 接口的默认实现类,提供了基本的增删改查操作的实现细节。它使用了泛型参数来规范实体类和主键类型,并实现了 IService 接口中定义的方法。用户可以继承 ServiceImpl 类,并在自己的实现类中添加或重写更具体的业务逻辑。用法:
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {}
二、IService用法
1、添加数据
// 插入一条记录(选择字段,策略插入)
boolean save(T entity);// 插入(批量)
boolean saveBatch(Collection<T> entityList);// 插入(批量,限制数量)
boolean saveBatch(Collection<T> entityList, int batchSize);// TableId 注解存在更新记录,否则插入一条记录
boolean saveOrUpdate(T entity);// 根据 updateWrapper 尝试更新,否则继续执行 saveOrUpdate(T) 方法
boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList);// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
可以开启 rewriteBatchedStatements=true 参数,提高批处理的执行效率。
2、删除数据
// 根据 entity 条件,删除记录
boolean remove(Wrapper<T> queryWrapper);// 根据 ID 删除
boolean removeById(Serializable id);// 根据 columnMap 条件,删除记录
boolean removeByMap(Map<String, Object> columnMap);// 删除(根据ID 批量删除)
boolean removeByIds(Collection<? extends Serializable> idList);
3、修改数据
// 根据 UpdateWrapper 条件更新记录,需要设置sqlset
boolean update(Wrapper<T> updateWrapper);// 根据 whereWrapper 条件,更新记录
boolean update(T updateEntity, Wrapper<T> whereWrapper);// 根据 ID 选择修改
boolean updateById(T entity);// 根据ID 批量更新
boolean updateBatchById(Collection<T> entityList);// 根据ID 批量更新
boolean updateBatchById(Collection<T> entityList, int batchSize);
4、查询数据
查询一条数据
// 根据 ID 查询
T getById(Serializable id);// 根据 Wrapper,查询一条记录。结果集如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")
T getOne(Wrapper<T> queryWrapper);// 根据 Wrapper,查询一条记录,这个是方法返回结果不止一条则会抛出异常,如果想默认取第一条结果,可以给这方法传第二个参数为false。
T getOne(Wrapper<T> queryWrapper, boolean throwEx);// 根据 Wrapper,查询一条记录
Map<String, Object> getMap(Wrapper<T> queryWrapper);// 根据 Wrapper,查询一条记录
// mapper:转换函数,用于将查询结果中的每个对象转换为指定的对象类型。
<V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
查询多条数据
// 查询所有
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 条件,查询全部记录
// mapper:转换函数,用于将查询结果中的每个对象转换为指定的对象类型。
<V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
查询记录数 count()
// 查询总记录数
int count();// 根据 Wrapper 条件,查询总记录数
int count(Wrapper<T> queryWrapper);
分页: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 是MyBatis-Plus 提供的一个分页相关的接口,它有一个实现类为 Page,类中定义了分页相关的多个参数。
- size (每页显示条数):此参数通常由前端传给我们,然后再封装到Page对象中进行分页查询;
- current (要展示哪一页数据):此参数通常由前端传给我们,然后再封装到Page对象中进行分页查询;
- orders(排序规则集合):按照哪些字段进行排序?可以为多个,例如希望通过时间进行排序,如果时间相同就根据用户ID降序排序,可以添加多个字段;
- total (总记录数):指查询完毕后返回的数据库中总记录数,注意不包含已被逻辑删除的数据;
- records(查询到的分页结果集数据):分页查询得到的多条数据会存储在 records 中,可以看出该对象是一个集合,可以传递一个泛型,泛型就是查询到的数据对应的实体泛型;
public class Page<T> implements IPage<T> {private static final long serialVersionUID = 8545996863226528798L;protected List<T> records;protected long total;protected long size;protected long current;protected List<OrderItem> orders;protected boolean optimizeCountSql;protected boolean searchCount;protected boolean optimizeJoinOfCountSql;protected String countId;protected Long maxLimit;
/* 以下省略 */
}
Page对象使用演示:
@SpringBootTest
public class ProductMapperTest {// 自动注入 productMapper 接口对应的实现类对象@Autowiredprivate ProductMapper productMapper;@Testpublic void testPageQuery(){// 创建分页查询相关参数 page,泛型为 Product,表示查询到的结果对应的实体类为ProductPage<Product> page = new Page<>();// 设置分页查询显示第二页的数据,实际开发过程中该参数有前端传递page.setCurrent(2);// 设置分页查询每页显示四条数据,实际开发过程中该参数有前端传递page.setSize(4);// 创建排序字段集合,不想排序不加即可,实际开发过程中一般都会要求按照时间降序排序List<OrderItem> orders = new ArrayList<>();// 按照价格排序,排序方式为降序,ASC为True表示升序,false表示降序,第一个参数表示数据库中的列名orders.add(new OrderItem("price",false));// 按照生产时间排序,排序方式为降序orders.add(new OrderItem("production_date",false));// 将排序对象集合加入分页查询对象Page中page.setOrders(orders);// 执行分页查询,可以创建一个Page对象接受查询结果,// 也可以用查询条件参数page,但其实最后结果都是同一个page = productMapper.selectPage(page, null);// 可以新创建一个Page对象,就像下面这样Page<Product> productPage = productMapper.selectPage(page,null);// 输出分页查询结果显示当前的哪一页System.out.println(page.getCurrent());// 输出分页查询结果的总数据条数System.out.println(page.getTotal());// 输出分页查询结果的数据集合System.out.println(page.getRecords());// 输出分页查询结果的每页显示条数System.out.println(page.getSize());// 判断刚才分页查询的两个结果对象是否为同一个System.out.println(page == productPage);// 输出第一个分页查询对象内存地址System.out.println(page);// 输出第二个分页查询对象内存地址System.out.println(productPage);}
}
链式
链式查询演示:
// 链式查询 普通
QueryChainWrapper<T> query();// 链式查询 lambda 式。注意:不支持 Kotlin
LambdaQueryChainWrapper<T> lambdaQuery();// 示例:
// eq 指定条件
query().eq("column", value).one();
lambdaQuery().eq(Entity::getId, value).list();
链式更新演示:
// 链式更改 普通
UpdateChainWrapper<T> update();// 链式更改 lambda 式。注意:不支持 Kotlin
LambdaUpdateChainWrapper<T> lambdaUpdate();// 示例:
// eq 指定条件
update().eq("column", value).remove();
lambdaUpdate().eq(Entity::getId, value).update(entity);
相关文章:
Mybatis plus:IService接口
一、介绍 在MybatisPlus框架中,IService接口扮演着重要的角色。作为一个通用的服务接口,IService定义了一系列方法,包括查询、插入、更新、删除等。这些方法的定义使得在服务层进行数据库操作变得更为便捷和高效。 IService 接口是一个泛型接…...
时序分析基本概念介绍——min pulse width 最小脉冲宽度
文章目录 前言一、什么是 min pulse width?二、为什么检查 min pulse width?三、如何设置 min pulse width约束?1. 在sdc里面定义2. library里面定义 四、如何检查 min pulse width?五、如何修复 min pulse width?总结…...
PHP原生代码生成pdf---解决中文乱码问题
github地址 尝试了使用composer下载FPDF或者FPDI,但是无法解决中文乱码问题。只有使用这个github上的中文包才可以,那俩没必要下。 直接上代码(这里并没有使用任何框架) require(./fpdf/chinese.php);//生成pdf$pdf new PDF_Chinese();$pdf->AddPage…...
智慧车库管理系统
摘 要 随着城市化进程的不断加快,私家车数量的快速增长给城市交通带来了巨大的挑战,停车问题成为城市交通管理中的一大难题。车辆停车时,在停车场寻找停车位耗时过久,不仅仅浪费用户的时间,还可能引起交通拥堵。城市停…...
每日新闻掌握【2024年6月26日 星期三】
2024年6月26日 星期三 农历五月廿一 大公司/大事件 OpenAI将终止对中国提供API服务 从6月24日晚间开始,已有多名用户收到了来自OpenAI的邮件。该邮件表示,“我们的数据显示您的组织来自OpenAI目前不支持的地区的API流量。”邮件进一步表示,…...
InVEST实践及在生态系统服务供需、固碳、城市热岛、论文写作等实际项目中应用
白老师(研究员):长期从事生态系统结构-格局-过程-功能-服务的变化与响应关系等研究工作,重点围绕生物多样性、生态系统服务与价值等,构建生物地球化学模型和评价指标体系,为城市、区域和自然保护区的可持续发展和生态环…...
慧科新闻搜索研究数据库的使用指南及个人获取途径
《慧科新闻搜索研究数据库》WiseSearch由慧科讯业有限公司出品。WiseSearch是具有新闻搜索/浏览、对比分析等功能的一站式新闻搜索平台;内容包括1200种报刊和8000 网站的新闻资讯,平面媒体涵盖全国综合大报、党委机关报、都市报、行业报刊媒体࿰…...
SpringBoot学习03-[Spring Boot与Web开发]
Spring Boot与Web开发 RestTemplateMockMvc在SPringBoot中使用 SpringBoot整合swagger2SpringBoot的springmvc自动配置底层原理包含ContentNegotiatingViewResolver和BeanNameViewResolverContentNegotiatingViewResolverBeanNameViewResolver 支持提供静态资源,包括…...
数据恢复篇:如何恢复丢失的Android短信?
许多用户发现自己处于重要短信意外从Android手机中删除的情况。幸运的是,有一些行之有效的方法可以在没有root的情况下恢复已删除的短信Android,这可以成为救命稻草。这些技术不需要深厚的技术知识,也不需要损害设备的安全性。为了帮助您摆脱…...
数据结构历年考研真题对应知识点(栈)
目录 3.1栈 3.1.1栈的基本概念 【栈的特点(2017)】 【入栈序列和出栈序列之间的关系(2022)】 【特定条件下的出栈序列分析(2010、2011、2013、2018、2020)】 3.1.2栈的顺序存储结构 【出/入栈操作的模拟(2009)】 3.1栈 3.1.1栈的基本概念 【栈…...
BarTender版软件下载及安装教程
根据行业数据显示强大的配套应用软件甚至能够管理系统安全性、网络打印功能、文档发布、打印作业记录等,为满足不同的需要和预算,BarTender 提供四个版本,每个都拥有卓越的功能和特性。根据软件大数据显示多国语言支持:轻松设计…...
Python 中从字典中提取所有值到列表
目录: 使用 keys() 方法使用 values() 方法使用 items() 方法使用 * 解包使用列表推导式使用 lambda 函数有时候,在使用 Python 字典时,只关心获取字典的值而不关心字典的键。可以使用多种方法从字典中获取所有的值。 使用 keys() 方法 Python 字典(Dictionary) keys() 方…...
Netty中Reactor线程的运行逻辑
Netty中的Reactor线程主要干三件事情: 轮询注册在Reactor上的所有Channel感兴趣的IO就绪事件。 处理Channel上的IO就绪事件。 执行Netty中的异步任务。 正是这三个部分组成了Reactor的运行框架,那么我们现在来看下这个运行框架具体是怎么运转的~~ 这…...
liunx 搭建 zookeeper
创建下载路径 #创建文件夹 mkdir -p /mydata/zookeeper #进入文件夹 cd /mydata/zookeeper下载zookeeper文件 #下载 wget https://mirrors.aliyun.com/apache/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz #解压文件 tar -zxvf apache-zookeeper-3.5.9-bin.…...
selenium 3中等待方式
Selenium 3中的等待方式主要有三种:强制等待、隐式等待和显式等待(智能等待的一种)。 1. 强制等待:使用time.sleep(X)方法,强制让浏览器等待X秒,无论当前操作是否完成,都…...
pytorch笔记:named_parameters
named_parameters 是 PyTorch 中一个非常有用的函数,用于访问模型中所有定义的参数及其对应的名称。它是 torch.nn.Module 类的方法之一,返回一个生成器,生成 (name, parameter) 对,name 是参数的名称,parameter 是对应…...
uniapp——H5添加支付宝授权登录,报错:系统异常,请联系商家。REDIRECT_URI_ILLEAGAL
解决方法 https://opensupport.alipay.com/support/FAQ/41bb980b-d18e-4141-8063-9d172cb7e655 这其中最常见的是授权的回调地址配置的不正确 应该为域名后面加上你H5打包后的名字,例如 https://www.xxx.com/agent要正确配置支付宝授权登录的回调地址,…...
群辉NAS使用Kodi影视墙
目录 一、KODI安装 二、修改UI语言 1、修改显示字体 2、修改语言为中文 四、添加媒体库 五、观看电影 五、高级设置 1、视图类型 2、修改点击播动作 五、补充 1、文件组织结构及命名 2、电影信息的刮削 (1)添加影片 (2)演员管理 (3)影片管理 (4)说明 K…...
如何实现HPC数据传输的高效流转,降本增效?
高性能计算(HPC)在多个行业中都有应用,涉及到HPC数据传输的行业包括但不限于: 1.科学研究:在物理学、化学、生物学、地球科学等领域进行模拟和建模。 2.工程和产品设计:进行复杂系统的设计和分析…...
redis 定时任务锁 分布式锁
基于 redisTemplate 在分布式集群环境中的最佳实践,其实无论是单机还是集群,保证原子性都是第一位的,如果能同时保证性能和高可用,那么就是一个可靠的分布式锁解决方案。 主要思路是:设置锁时,使用 redis…...
暗黑3鼠标宏终极指南:D3KeyHelper 5步配置法快速上手
暗黑3鼠标宏终极指南:D3KeyHelper 5步配置法快速上手 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper D3KeyHelper是一款专为暗黑破坏神3玩…...
别再死记硬背公式了!用Python+NumPy手把手带你仿真RLC串联谐振(附代码)
用PythonNumPy动态仿真RLC串联谐振:告别枯燥公式,直观理解电路本质 当你第一次翻开电路分析教材,看到那些密密麻麻的公式推导和抽象的频率响应曲线时,是否感到一阵眩晕?RLC串联谐振作为电路分析的核心概念,…...
YimMenu:GTA V终极游戏增强工具完整实战手册
YimMenu:GTA V终极游戏增强工具完整实战手册 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu …...
低温预警!固化慢、易开裂……密封胶冬季施工手册
低温预警!固化慢、易开裂……密封胶冬季施工手册 硅酮耐候密封胶主要作用是保障幕墙的气密性、水密性。其出现问题,可能会导致耐候密封失效,从而造成幕墙漏水漏气,影响幕墙的正常使用。耐候密封胶由于考虑到现场施工,几乎都是单组分硅酮密封胶产品。进入冬季,气候变化明…...
3倍效率提升:Gofile批量下载工具实战指南
3倍效率提升:Gofile批量下载工具实战指南 【免费下载链接】gofile-downloader Download files from https://gofile.io 项目地址: https://gitcode.com/gh_mirrors/go/gofile-downloader 您是否曾为Gofile平台的文件下载效率低下而烦恼?当面对大文…...
空洞骑士模组管理器Scarab:2024年最全面的安装与管理指南
空洞骑士模组管理器Scarab:2024年最全面的安装与管理指南 【免费下载链接】Scarab An installer for Hollow Knight mods written with Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 还在为空洞骑士模组安装的复杂流程而烦恼吗?…...
Claude API企业准入最后窗口期:2024Q3起强制启用OAuth 2.1+硬件级密钥绑定,现在不升级将无法续签
更多请点击: https://intelliparadigm.com 第一章:Claude API企业准入政策的演进与合规紧迫性 随着Anthropic对Claude模型商用边界的持续收束,企业级API接入正从“技术可用性”转向“治理可验证性”。2024年Q2起,所有新注册企业账…...
别再只盯着CSI-2了!用示波器实测MIPI D-PHY波形,手把手教你排查Camera不通的硬件问题
别再只盯着CSI-2了!用示波器实测MIPI D-PHY波形,手把手教你排查Camera不通的硬件问题 调试Camera模块时,MIPI信号问题往往是硬件工程师最头疼的挑战之一。当系统出现图像异常、花屏或无法识别时,大多数工程师的第一反应是检查CSI-…...
初创团队如何通过Taotoken的Token Plan实现成本可控的AI应用开发
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初创团队如何通过Taotoken的Token Plan实现成本可控的AI应用开发 对于预算敏感的初创团队和独立开发者而言,在开发AI应…...
基于NestJS与Next.js的自托管电影管理应用Story Flicks部署与实战
1. 项目概述:一个为影迷打造的私人观影档案库 如果你和我一样,是个重度电影爱好者,那么你一定经历过这样的时刻:看完一部好片子,内心澎湃,想写点什么记录一下,却发现豆瓣、IMDb的评论区要么太嘈…...
