当前位置: 首页 > news >正文

com.baomidou.mybatisplus.extension.service.IService用法详解及使用例子

IService 是 MyBatis-Plus 中的一个接口,提供了通用的 CRUD 操作,简化了数据库操作的代码。下面是 IService 的用法详解及示例代码。

1. 引入依赖

确保在你的 pom.xml 中添加了 MyBatis-Plus 的依赖:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.0</version> <!-- 请根据实际情况使用最新版本 -->
</dependency>

2. 创建实体类

首先,创建一个实体类,例如 User

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;@TableName("user") // 指定表名
public class User {@TableId // 主键private Long id;private String name;private Integer age;// Getters and Setters
}

3. 创建 Mapper 接口

创建一个 Mapper 接口,继承 BaseMapper

import com.baomidou.mybatisplus.core.mapper.BaseMapper;public interface UserMapper extends BaseMapper<User> {
}

4. 创建 Service 接口

创建一个 Service 接口,继承 IService

import com.baomidou.mybatisplus.extension.service.IService;public interface UserService extends IService<User> {
}

5. 创建 Service 实现类

实现 Service 接口:

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {// 可以添加自定义的方法
}

6. 使用 Service

在你的 Controller 中使用 UserService

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;@PostMappingpublic boolean saveUser(@RequestBody User user) {return userService.save(user);}@GetMapping("/{id}")public User getUser(@PathVariable Long id) {return userService.getById(id);}@GetMappingpublic List<User> getAllUsers() {return userService.list();}@PutMappingpublic boolean updateUser(@RequestBody User user) {return userService.updateById(user);}@DeleteMapping("/{id}")public boolean deleteUser(@PathVariable Long id) {return userService.removeById(id);}
}

7. 常用方法

IService 提供了一些常用方法,包括:

  • save(T entity):保存一个实体
  • removeById(Serializable id):根据 ID 删除
  • updateById(T entity):根据 ID 更新
  • getById(Serializable id):根据 ID 查询
  • list():查询所有记录
  • count():查询总数

总结

通过继承 IService,你可以快速实现 CRUD 操作,减少了代码量。MyBatis-Plus 还支持很多功能,如条件构造器、分页等,可以进一步提高开发效率。

在 MyBatis-Plus 中,可以在服务实现类中添加自定义方法,以实现特定的业务逻辑。下面是如何在 UserServiceImpl 中添加自定义方法的示例。

1. 添加自定义方法到 Service 接口

首先,在 UserService 接口中定义你想要的自定义方法。例如,我们可以添加一个方法来根据年龄查询用户列表:

import java.util.List;public interface UserService extends IService<User> {List<User> findByAge(Integer age); // 自定义方法
}

2. 在 Service 实现类中实现自定义方法

接下来,在 UserServiceImpl 中实现这个方法。你可以使用 UserMapper 来执行自定义查询:

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {// 实现自定义方法@Overridepublic List<User> findByAge(Integer age) {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("age", age); // 添加条件return this.list(queryWrapper); // 调用基类方法查询}
}

3. 在 Controller 中使用自定义方法

最后,可以在控制器中调用这个自定义方法。例如,添加一个新的 API 端点来根据年龄查询用户:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;// 其他 CRUD 方法...@GetMapping("/age/{age}")public List<User> getUsersByAge(@PathVariable Integer age) {return userService.findByAge(age); // 调用自定义方法}
}

4. 完整的示例

现在你的 UserServiceUserServiceImpl 中已经有了自定义方法,而 UserController 也可以根据年龄查询用户。以下是最终的代码片段:

UserService.java
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;public interface UserService extends IService<User> {List<User> findByAge(Integer age); // 自定义方法
}
UserServiceImpl.java
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;
import java.util.List;@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {@Overridepublic List<User> findByAge(Integer age) {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("age", age);return this.list(queryWrapper);}
}
UserController.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;// 其他 CRUD 方法...@GetMapping("/age/{age}")public List<User> getUsersByAge(@PathVariable Integer age) {return userService.findByAge(age);}
}

总结

通过这种方式,你可以轻松地在服务层添加自定义方法,利用 MyBatis-Plus 提供的强大功能来实现复杂的业务逻辑。

相关文章:

com.baomidou.mybatisplus.extension.service.IService用法详解及使用例子

IService 是 MyBatis-Plus 中的一个接口&#xff0c;提供了通用的 CRUD 操作&#xff0c;简化了数据库操作的代码。下面是 IService 的用法详解及示例代码。 1. 引入依赖 确保在你的 pom.xml 中添加了 MyBatis-Plus 的依赖&#xff1a; <dependency><groupId>co…...

植物健康,Spring Boot来保障

5系统详细实现 5.1 系统首页 植物健康系统需要登录才可以看到首页。具体界面的展示如图5.1所示。 图5.1 系统首页界面 5.2 咨询专家 可以在咨询专家栏目发布消息。具体界面如图5.2所示。 图5.2 咨询专家界面 5.3 普通植物检查登记 普通员工可以对普通植物检查登记信息进行添…...

mac-chrome提示您的连接不是私密连接

一、现象介绍 关闭代理之后就ok打开代理&#xff0c;就会提示您的连接不是私密连接 二、原因 由于代理部分的问题&#xff0c;无法找到正确的网站ip地址 三、解决方法 1、键盘直接输入thisisunsafe&#xff0c;可以继续访问网站&#xff0c;如果还是不对的话&#xff0c;那…...

028.爬虫专用浏览器-抓取#shadowRoot(closed)下的内容

一、什么是Shadow DOM Shadow DOM是一种在web开发中用于封装HTML标记、样式和行为的技术&#xff0c;以避免组件间的样式和脚本冲突。它允许开发者将网页的一部分隐藏在一个独立的作用域内&#xff0c;从而实现更加模块化和可维护的代码结构 二、js操作Shadow DOM // 获取宿…...

Serv00 免费虚拟主机 零成本搭建 PHP / Node.js 网站

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 Serv00 是一个提供免费虚拟主机的平台&#xff0c;包含了 3GB 的存储空间和 512MB 的内存空间&#xff0c;足够我们搭建一个 1IP 的小网站了。同时他还不限制每月的流量&#xff0c;并提供了 16 个数据库&…...

C#里使用ORM访问mariadb数据库

数据库,对于开发人员来说,是必须掌握的内容。 曾经我的老板对我说,只要会数据库的增删查改,就不会没有饭吃。 经过了20年多的工作经历,说明这个是铁的事实,毕竟计算机就是加工数据处理的而设计的。 数据就是信息,信息就是金钱,有了钱就可以有饭吃。 管理数据,就是…...

电商揭秘:商城积分体系简析

引言 商城积分体系划分是一个复杂而细致的过程&#xff0c;它旨在通过积分这一虚拟货币来激励用户行为、提升用户粘性&#xff0c;并促进商城的销售和用户活跃度。以下是对商城积分体系划分的详细解析&#xff1a; 一、积分获取方式 消费积分&#xff1a; 基础积分&#xff1a…...

[OS] 终端控制(Terminal Control) 暂停执行线程(Suspend Executing Thread)

7. 终端控制&#xff08;Terminal Control&#xff09; 在终端中打印信息时&#xff0c;我们可以使用 ANSI 转义序列来控制光标的位置、清除屏幕等操作。\033 是转义字符&#xff0c;用于引导 ANSI 控制码来控制终端显示。可以将它理解为“命令前缀”&#xff0c;后面跟着具体…...

水陆两栖车应对应急事件发挥的作用_鼎跃安全

随着气候变化&#xff0c;城市内涝等问题日益严重。为了应对可能出现的洪水灾害&#xff0c;许多城市开始将水陆两栖车纳入应急救援装备体系。在暴雨引发城市积水时&#xff0c;水陆两栖车可以作为一种高效的救援和运输工具&#xff0c;及时疏散被困群众&#xff0c;运送应急物…...

CI/CD 流水线系统-开源框架Tekton

文章目录 CI/CD 流水线系统-开源框架Tekton什么是TektonTekton优点Tekton 组件介绍Tekton 概念术语 CI/CD 流水线系统-开源框架Tekton 什么是Tekton 官网&#xff1a;https://tekton.dev/ Tekton 是一个强大、灵活的构建 CI/CD 流水线系统的开源框架,允许开发者构建、测试和…...

Spring MVC(下)

博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:MySQL数据库 JavaEE专栏:JavaEE 关注博主带你了解更多JavaEE知识 目录 1.响应 1.1 返回静态页面 1.2 返回数据ResponseBody 1.3 返回HTML代码⽚段 1.4 返回JSON 1.5 设置状态码 1.6 设置Header 2 . …...

开发涉及的安全规范整理

#1024程序员节&#xff5c;征文# 文章目录 前言安全场景与措施API调用方式鉴权参数校验日志打印数据保存加密 总结 前言 这篇文章我们来整理下写代码和方案设计中的安全规范问题&#xff0c;内容偏服务端&#xff0c;即使是入门的新人&#xff0c;如果你对安全有所了解会让成熟…...

驱动开发系列26 - Linux Graphics 调试 mesa 的 glDrawArrays (二)

目录 一:概述 二:Gallium3D 的工作流程 三:tc_draw_vbo 与 tc_call_draw_single 的关系: 四:tc_draw_vbo 与 tc_call_draw_single 的具体执行流程: 五:mesa中线程池设计介绍: 六:总结: 一:概述 众所周知,Mesa 的 Gallium3D 是一个图形驱动框架,它将图形管线…...

laya-spine动画的使用

laya2和laya3的spine动画在使用过程中并无太大区别&#xff0c;这里以laya3为例。 转换 首先将做好的spine动画按jison格式导出&#xff0c;导出完之后的文件应包括图集、图片和json类型的3个文件。然后再用laya的骨骼动画转换工具转换成laya内置的模式&#xff0c;转换后的文…...

Vue项目实战-新能源汽车可视化(一)(持续更新中)

一.项目代码 1.App.vue <template><!-- 模板--><div id"wrapper"><div style"width: 100%"><el-tabs v-model"activeName" id"tabs"> <!-- 标签栏里包含了三个标签面板&#xff0c;分别是研发与维…...

百度SEO前10关键词排名波动跟用户行为反馈有很大关系

大家好&#xff0c;我是林汉文&#xff08;谷歌SEO专家&#xff09;&#xff0c;在百度SEO优化中&#xff0c;网站的排名并非一成不变&#xff0c;尤其是前10名的位置&#xff0c;更是动态变化。很多站长可能会发现&#xff0c;有时明明内容质量不错&#xff0c;外链也稳定&…...

基于微信小程序的电影交流平台

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

Java实现 itext PDF文件打印水印(文字和图片水印)

itext PDF文件打印水印 前言&#xff1a;公司有个需求&#xff0c;打印的合同模板要加上水印&#xff0c;但是由于itext版本问题&#xff0c;网上千篇一律的方法基本都没办法有效使用&#xff0c;然后自己琢磨下&#xff0c;记录下实现水印的功能的笔记。多页上都加上水印&…...

面经之一:Synchronized与ReentrantLock区别

Synchronized与ReentrantLock是Java中用于实现线程同步的两种主要机制&#xff0c;它们各有特点和适用场景。以下是它们的主要区别&#xff1a; 实现方式&#xff1a; Synchronized&#xff1a;是Java语言内置的关键字&#xff0c;通过JVM层面的监视器&#xff08;Monitor&…...

论文速读:面向单阶段跨域检测的域自适应YOLO(ACML2021)

原文标题&#xff1a;Domain Adaptive YOLO for One-Stage Cross-Domain Detection 中文标题&#xff1a;面向单阶段跨域检测的域自适应YOLO 1、Abstract 域转移是目标检测器在实际应用中推广的主要挑战。两级检测器的域自适应新兴技术有助于解决这个问题。然而&#xff0c;两…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...