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 {

    @Autowired
    private UserService userService;

    @PostMapping
    public boolean saveUser(@RequestBody User user) {
        return userService.save(user);
    }

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return userService.getById(id);
    }

    @GetMapping
    public List<User> getAllUsers() {
        return userService.list();
    }

    @PutMapping
    public 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 {

    // 实现自定义方法
    @Override
    public 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 {

    @Autowired
    private 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 {

    @Override
    public 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 {

    @Autowired
    private UserService userService;

    // 其他 CRUD 方法...

    @GetMapping("/age/{age}")
    public List<User> getUsersByAge(@PathVariable Integer age) {
        return userService.findByAge(age);
    }
}

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/900247.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

腾讯推出ima.copilot智能工作台产品 由混元大模型提供技术支持

腾讯公司近期推出了一款名为ima.copilot&#xff08;简称ima&#xff09;的智能工作台产品&#xff0c;它由腾讯混元大模型提供技术支持。这款产品旨在通过其会思考的知识库&#xff0c;为用户开启搜读写的新体验。ima.copilot的核心功能包括知识获取、打造专属知识库以及智能写…

【算法】递归系列:递归初介绍,练习:231.2 的幂、

目录 一、理解递归 1、什么是递归&#xff1f; 2、为什么会使用递归&#xff1f; 3、递归使用的场景&#xff1f; 4、那么如何写出递归解法&#xff1f; 二、实践 231. 2的幂 1.函数头的设计 2.只关心某一个子问题是如何解决的 ->函数体的书写 3.注意一下递归函数的出…

个人品牌塑造与商业增长的加速器:开源AI智能名片2+1链动模式S2B2C商城小程序源码的应用研究

摘要&#xff1a;本文旨在深入探讨个人品牌塑造与商业增长过程中的核心要素&#xff0c;特别是“开源AI智能名片21链动模式S2B2C商城小程序源码”在提升品牌影响力、吸引潜在客户、促进团队协作及推动商业增长方面的具体应用与显著成效。通过详细分析一位微商从业者的实际案例&…

零代码快速开发智能体 |甘肃旅游通

在互联网信息爆炸的时代&#xff0c;寻找一处让人心动的旅游胜地往往需要花费大量的时间和精力。而今天&#xff0c;我要向大家介绍一款能够帮助你轻松规划甘肃之行的智能体——“甘肃旅游通”。这款智能体通过低代码开发&#xff0c;集合了丰富的旅游信息和个性化推荐功能&…

4种鼓励创业创新的方法

随着市场趋于饱和&#xff0c;许多企业&#xff0c;尤其是初创企业&#xff0c;很难在竞争中保持领先地位。技术为企业彻底改变其营销和管理策略铺平了道路。另一个经过实践检验的成功渗透特定市场的方法是在办公室内部激发创新&#xff0c;从员工到品牌皆如此。 那么究竟如何…

Ajax笔记

介绍 Ajax是一种网页开发技术&#xff0c;全称是Asynchronous JavaScript and XML&#xff08;异步JavaScript和XML&#xff09;。作用如下&#xff1a; 数据交换&#xff1a;可以通过Ajax给服务器发送请求&#xff0c;并获取服务器响应的数据。即前端动态的发送Ajax到服务器端…

秦时明月2搭建笔记

1.具体配置 数据库不修改&#xff0c;如果修改了&#xff0c;gm那边也要 2.数据库 3.上传配置文件出现问题 参考&#xff1a;对于测试时&#xff0c;错误信息 Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large-CSDN博客 4.启动tomcat&#x…

指增和中性产品的申赎加减仓及资金调拨自动化伪代码思路

定义一些关键字代表的意义 STRUCT: 代表需要输入的格式化的信息IMPORT: 代表需要输入的外部信息&#xff0c; 这些信息通常是客观的SEARCH: 需要从某地比如数据库检索搜集信息SUM: 一种宏观的加和操作&#xff0c; 比如两个股票户ABAB&#xff0c;微观上实际还是有差异GROUP: …

Umi UI报错:连接失败,请尝试重启dev服务

Umi UI连接失败&#xff0c;请尝试重启dev服务 使用umi ui时遇到以下问题 报错如下 从报错可以看出是淘宝镜像失效的问题&#xff0c;检查淘宝镜像 可以看出淘宝镜像是最新的&#xff0c;并无问题 经过查找发现报错是因为依赖文件中使用了旧的淘宝镜像&#xff0c;在node…

【SAP Hana】X-DOC:数据仓库ETL如何抽取SAP中的CDS视图数据

【SAP Hana】X-DOC&#xff1a;数据仓库ETL如何抽取SAP中的CDS视图数据 1、无参CDS对应数据库视图2、有参CDS对应数据库表函数3、封装有参CDS为无参CDS&#xff0c;从而对应数据库视图 1、无参CDS对应数据库视图 select * from ZFCML_REP_V where mandt 300;2、有参CDS对应数…

开发涉及的安全规范整理

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

go语言中的Scanf()输入函数

Scanf() 第一种情况 package mainimport "fmt"func main() {var a intfor {fmt.Println("请输入一个整数:")fmt.Scanf("%d", &a)fmt.Println("----------------", a)} }运行结果&#xff1a; 解释&#xff1a; 出现这种现象是因…

CentOS 8在Linux虚拟机修改IP地址,出现:错误:“ens160“ 不是活动的连接。错误:未提供活动连接。

问题&#xff1a;错误&#xff1a;"ens160" 不是活动的连接。错误&#xff1a;未提供活动连接。 1.查看网络服务运行状态&#xff1a; 1)CentOS 7执行命令&#xff1a;systemctl status network 2)CentOS 8执行命令&#xff1a;systemctl status NetworkManager&a…

双十一有哪些适合学生党的好物?五款学生党必备好物分享

在双十一这个全民狂欢的购物盛宴中&#xff0c;不仅仅是寻找生活的小确幸&#xff0c;更是自我提升与投资的最佳时机。学习&#xff0c;作为个人成长的阶梯&#xff0c;其相关的好物选择显得尤为重要。本文精选了一系列学习、生活神器&#xff0c;旨在为您的学习之旅增添动力与…

手机防窥膜的工作原理是怎样的?有必要使用防窥膜吗?

在信息高度发达的社会中&#xff0c;我们通过手机可以实现非常多的操作&#xff0c;同时手机中有存在许多我们的隐私信息&#xff0c;伴随使用手机的时间增多&#xff0c;手机中的信息也有可能被暴露&#xff0c;尤其是在公共场所旁人很容易通过瞥视你的手机屏幕获取到一些信息…

青少年编程能力等级测评CPA C++(三级)-试卷1

青少年编程能力等级测评CPA C&#xff08;三级&#xff09;-试卷1 一、单项选择题&#xff08;共15题&#xff0c;每题3分&#xff0c;共45分&#xff09; CP3_1_1&#xff0e;以下有关模拟算法的叙述中&#xff0c;不正确的是&#xff08; &#xff09;。 A&#xff0e;模拟…

普通数组矩阵

文章目录 普通数组一、最大子数组二、合并区间三、轮转数组四、除自身以外数组的乘积五、缺失的第一个正数 普通数组 一、最大子数组 题目链接 方法一&#xff1a;动态规划 方法二&#xff1a;前缀和&#xff08;有点难理解&#xff09; 二、合并区间 题目链接 三、轮…

软件部署-Docker容器化技术(二)

上一期分享了Docker的一些基本内容&#xff0c;这一期主要对构建基础镜像和Docker网络、文件挂载再展开分享下&#xff0c;可能不一定做得很好&#xff0c;主要是在学习的过程中有一些自己的总结和思考&#xff0c;和大家一起学习。 名词说明&#xff1a;这里的宿主机是指liun…

【D3.js in Action 3 精译_037】4.1 DIY 实战:D3 源码分析之——d3.timeFormat() 函数

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

Shopee虾皮登录不了的常见原因及解决方式

在近年来&#xff0c;随着电子商务的迅猛发展&#xff0c;Shopee虾皮作为东南亚地区的领先购物平台&#xff0c;吸引了大量用户。一些用户在使用过程中常常遇到登录问题&#xff0c;而登录不了的原因可能多种多样&#xff0c;包括网络连接不稳定、账号信息输入错误&#xff0c;…