全栈开发(四):使用springBoot3+mybatis-plus+mysql开发restful的增删改查接口

 1.创建user文件夹 作为增删改查的根包

     路径  src/main/java/com.example.demo/user

2.文件夹里文件作用介绍

1.User(实体类)

package com.example.demo.user;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;@Data // Lombok注解,自动生成getter、setter、toString、equals和hashCode等方法
@NoArgsConstructor
@AllArgsConstructor
@TableName("user") // 指定该实体类对应的数据库表名为"user"
public class User {@TableId(type = IdType.AUTO) // 主键设置为自增private Integer id; // 主键字段,对应数据库中的"id"列@TableField("name") // 明确字段与数据库列的映射关系private String name; // 用户名字段,对应数据库中的"name"列@TableField("age")private Integer age; // 年龄字段,对应数据库中的"age"列@TableField("description")private String description; // 用户描述字段,对应数据库中的"description"列
}

2.condition

UserQueryCondition

UserQueryCondition 类的主要作用是作为查询用户时的条件类,用于封装查询条件。它通常用于在接收查询参数时,将这些参数封装成对象传递给服务层或数据库查询层,以实现查询操作。具体来说,它的功能包括:

  1. 封装查询参数

    • current:当前的页码,默认为1。用于分页查询时指定查询结果的页码。
    • pageSize:每页显示的数据条数,默认为10。用于分页查询时指定每页要显示的记录数。
    • name:用户的名称,用于按名称进行模糊或精确查询。
    • age:用户的年龄,用于按年龄查询。
    • description:用户的描述信息,作为查询条件之一,用于按用户描述筛选数据。
  2. 提供数据传输对象(DTO)功能

    • 该类可以在控制器层接受前端传来的查询条件参数,也可以作为参数传递给服务层或数据访问层,从而避免在方法中传递过多参数,使代码更加简洁。
  3. 分页功能

    • 通过 currentpageSize 这两个字段,配合分页逻辑,能够实现用户信息的分页查询。开发者可以通过这两个字段计算出需要查询的具体范围(如数据库的 LIMIT 子句中的 offsetlimit),从而提高查询性能,防止一次性返回大量数据。
  4. 简化条件查询

    • 通过封装成类对象,所有查询条件可以一次性通过该类对象传递,不需要在方法中传递多个单独的查询参数,简化了方法调用的参数列表。
package com.example.demo.user.condition;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserQueryCondition {private int current = 1;       // 当前页码,默认值为1private int pageSize = 10;     // 每页显示数量,默认值为10private String name;private Integer age;private String description;
}

@Data@NoArgsConstructor@AllArgsConstructor 是 Lombok 提供的注解,用于简化 Java 类的编写。它们的作用分别如下:

  1. @Data

    • 自动生成该类的常用方法,如:
      • getters(获取属性值的方法)
      • setters(设置属性值的方法)
      • toString()(生成该类的字符串表示)
      • equals()hashCode()(用于比较和集合操作)
    • 这个注解为类提供了所有必要的工具方法,大大简化了开发时的样板代码。
  2. @NoArgsConstructor

    • 自动生成一个无参构造方法(没有参数的构造器)。
    • 这个构造方法可以在不传递任何参数的情况下创建该类的实例。
    • 使用场景:当需要先创建一个空对象,然后逐步设置其属性时(比如通过 setter 方法)。
  3. @AllArgsConstructor

    • 自动生成一个包含所有字段的有参构造方法。
    • 这个构造方法会根据类中的所有字段生成参数,方便在创建对象时一次性初始化所有属性。
    • 使用场景:当想直接在实例化对象时就传递所有字段的值。

 3.response

 1.UserCRUDResponse   

作用和上面的condition差不多,不多赘述

package com.example.demo.user.response;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserCUDResponse {private String message;   // 响应信息(如成功或失败消息)private boolean success;
}

2.UserQueryResponse

package com.example.demo.user.response;import com.example.demo.user.User;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserQueryResponse {private List<User> data;     // 用户数据列表private long total;          // 总记录数private String message;      // 响应信息(如成功或失败消息)private boolean success;
}

4.UserMapper

UserMapper 接口的作用是作为用户数据表的数据库操作接口,使用 MyBatis-Plus 提供的 BaseMapper 接口,来对 User 实体类对应的数据库表进行基本的 CRUD(创建、读取、更新、删除)操作。这个接口通过继承 BaseMapper<User>,不需要开发者自己编写 SQL,就可以轻松实现对 User 数据的数据库操作。

具体功能如下:

  1. 继承 BaseMapper 提供的通用 CRUD 功能

    • MyBatis-Plus 中的 BaseMapper<T> 是一个通用的 Mapper 接口,封装了常见的数据库操作方法。通过继承 BaseMapper<User>UserMapper 自动获得以下基本方法:
      • insert(T entity):插入一条记录。
      • deleteById(Serializable id):根据主键 ID 删除一条记录。
      • updateById(T entity):根据主键 ID 更新记录。
      • selectById(Serializable id):根据主键 ID 查询一条记录。
      • selectList(Wrapper<T> queryWrapper):查询多条记录。

    这些方法的 SQL 语句已经由 MyBatis-Plus 自动生成并执行,开发者不需要自己写。

  2. 与数据库交互

    • 通过 @Mapper 注解,MyBatis 会在程序启动时扫描该接口,将它注册为 MyBatis 的 Mapper,并生成相应的代理对象,处理与数据库的交互。具体来说,它会将 UserMapper 接口的方法调用,映射为对应的 SQL 语句,并将 SQL 结果映射为 User 对象。
  3. 可以扩展自定义 SQL 操作

    • 虽然 BaseMapper 提供了常见的 CRUD 方法,但如果项目中需要进行更复杂的查询或自定义 SQL 操作,UserMapper 还可以通过定义接口方法并配合 XML 文件或注解,编写自定义 SQL。例如,可以使用 @Select@Insert 等注解直接在接口中编写 SQL,或在 XML 文件中定义复杂的查询逻辑。
package com.example.demo.user;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper extends BaseMapper<User> {
}

5.UserServiceImpl 

UserServiceImplUserService 接口的具体实现类,它负责实际执行用户相关的业务逻辑操作。它通过调用数据访问层(如 UserMapper)来实现 UserService 接口定义的方法,处理具体的增删改查等业务逻辑。

主要作用:

  1. 实现业务逻辑

    • UserServiceImpl 实现了 UserService 接口中定义的各个方法,负责用户的实际操作,比如查询用户、添加用户、删除用户、更新用户等业务逻辑。
  2. 调用数据访问层

    • 通过注入 UserMapperUserServiceImpl 调用 MyBatis-Plus 提供的数据访问层方法,与数据库进行交互,完成对用户数据的操作。UserMapper 提供了基本的 CRUD 操作,而 UserServiceImpl 可以将这些操作结合业务逻辑进行封装。
  3. 为控制层提供服务

    • 控制器层(UserController)会调用 UserServiceImpl 中的方法来执行具体的业务操作。控制层只负责处理 HTTP 请求,而具体的业务逻辑由 UserServiceImpl 处理,控制层和数据访问层通过服务层(UserServiceImpl)解耦。
package com.example.demo.user;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.user.condition.UserQueryCondition;
import com.example.demo.user.response.UserCUDResponse;
import com.example.demo.user.response.UserQueryResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Optional;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic UserQueryResponse getAllUsersWithCount(UserQueryCondition condition) {IPage<User> userPage = new Page<>(condition.getCurrent(), condition.getPageSize());QueryWrapper<User> queryWrapper = new QueryWrapper<>();// 根据条件构建查询Optional.ofNullable(condition.getName()).ifPresent(name -> queryWrapper.like("name", name));Optional.ofNullable(condition.getAge()).ifPresent(age -> queryWrapper.eq("age", age));Optional.ofNullable(condition.getDescription()).ifPresent(description -> queryWrapper.like("description", description));// 执行分页查询userPage = userMapper.selectPage(userPage, queryWrapper);// 返回结果return new UserQueryResponse(userPage.getRecords(), userPage.getTotal(), "查询成功", true);}@Overridepublic UserCUDResponse addUser(User user) {try {int result = userMapper.insert(user);if (result > 0) {return new UserCUDResponse( "新增成功", true);} else {return new UserCUDResponse("新增失败,未插入任何记录", false);}} catch (Exception e) {// 捕获异常并返回错误信息return new UserCUDResponse("新增失败,错误信息:" + e.getMessage(), false);}}@Overridepublic UserCUDResponse deleteUserById(Long id) {// 使用MyBatis Plus的deleteById方法删除用户int rows = userMapper.deleteById(id);  // 返回受影响的行数if (rows > 0) {// 删除成功返回信息return new UserCUDResponse("删除成功", true);} else {// 删除失败返回信息return new UserCUDResponse( "删除失败,用户不存在", false);}}@Overridepublic UserCUDResponse updateUserById(User user) {// 使用MyBatis Plus的updateById方法更新用户int result = userMapper.updateById(user); // 返回受影响的行数if (result > 0) {return new UserCUDResponse("用户信息更新成功", true);} else {return new UserCUDResponse("用户信息更新失败", false);}}
}

 config/MybatisPlusConfig

里面配置了分页插件

package com.example.demo.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MybatisPlusConfig {// 配置 MyBatis-Plus 分页插件@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor());return interceptor;}
}

 

6.UserService

UserService 是一个服务层接口,定义了与用户相关的业务逻辑操作。它抽象出了一些对用户信息的常见操作,比如查询、添加、删除和更新等,供 UserController 等其他层调用。具体来说,它定义了业务方法的签名,而具体的实现通常会在一个类中实现这些接口方法(比如 UserServiceImpl)。

主要作用:

  1. 抽象业务逻辑

    • UserService 是对用户相关的业务逻辑操作的抽象,不直接操作数据库,而是通过调用数据访问层(比如 UserMapper)来实现业务逻辑。它将业务层与持久层解耦。
  2. 为控制层提供接口

    • UserController 可以调用 UserService 中定义的方法,将具体的业务操作(如用户的增删改查)委托给服务层。控制器只负责处理请求和响应,而业务逻辑则在服务层处理。
  3. 接口定义

    • UserService 只是定义了方法签名,而具体的业务逻辑如何执行,通常会在其实现类中进行处理。通过定义接口,可以有多个实现类,并在不同情况下选择不同的实现方式。

方法解析:

  1. getAllUsersWithCount(UserQueryCondition condition)

    • 根据查询条件 UserQueryCondition,获取所有用户数据和总记录数。该方法返回 UserQueryResponse 对象,通常包含用户列表和总记录数,用于分页查询。
  2. addUser(User user)

    • 该方法负责添加新用户。接收 User 对象作为参数,返回 UserCUDResponse,表示操作的结果(例如操作是否成功、用户的ID等)。
  3. deleteUserById(Long id)

    • 根据用户 ID 删除用户。接受一个 id 参数,调用底层的删除逻辑,返回 UserCUDResponse 表示删除操作的结果。
  4. updateUserById(User user)

    • 该方法用于根据用户 ID 更新用户信息。接受一个 User 对象(通常包含用户 ID 和需要更新的字段),返回 UserCUDResponse 表示更新操作的结果。
package com.example.demo.user;import com.example.demo.user.condition.UserQueryCondition;
import com.example.demo.user.response.UserCUDResponse;
import com.example.demo.user.response.UserQueryResponse;public interface UserService {UserQueryResponse getAllUsersWithCount(UserQueryCondition condition);UserCUDResponse addUser(User user); // 新增方法UserCUDResponse deleteUserById(Long id);UserCUDResponse updateUserById(User user); // 通过用户 ID 修改用户信息}

7.UserController

UserController 是一个 Spring Boot 的控制器类,负责处理与用户相关的 HTTP 请求。它作为应用程序的入口之一,接收来自客户端的请求,并将请求委托给相应的服务层进行处理。下面是 UserController 的主要作用:

主要功能:

  1. 处理 HTTP 请求

    • UserController 定义了多个处理方法(例如 getAllUsersaddUserdeleteUserByIdupdateUserById),用于响应不同的 HTTP 请求类型(GET、POST、DELETE、PUT)。
  2. 接收和解析请求参数

    • 控制器可以接收客户端传来的请求参数(如查询条件、用户数据等),并通过注解(如 @RequestBody@PathVariable@Validated)进行解析和验证。
  3. 调用服务层

    • 控制器负责调用服务层(如 UserService)的方法来执行业务逻辑。例如,当接收到添加用户的请求时,控制器会调用 UserServiceaddUser 方法来执行具体的添加操作。
  4. 构建响应

    • 控制器将服务层返回的结果(如用户数据、操作结果等)构建成 HTTP 响应返回给客户端。这可能包括状态码、响应体等。
  5. 统一接口前缀

    • 通过 @RequestMapping("/api/user"),控制器定义了一个统一的接口前缀,使得所有与用户相关的 API 都以 /api/user 开头,方便管理和使用。
package com.example.demo.user;import com.example.demo.user.condition.UserQueryCondition;
import com.example.demo.user.response.UserCUDResponse;
import com.example.demo.user.response.UserQueryResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/api/user") // 统一接口前缀
public class UserController {@Autowiredprivate UserService userService;@GetMappingpublic UserQueryResponse getAllUsers(@Validated UserQueryCondition condition  // 使用 UserQueryCondition 作为查询条件) {// 直接传入查询条件到服务层return userService.getAllUsersWithCount(condition);}@PostMapping  // 使用 POST 请求添加用户public UserCUDResponse addUser(@RequestBody User user) {return userService.addUser(user);}// 删除用户接口,根据用户ID删除@DeleteMapping("/{id}")public UserCUDResponse deleteUser(@PathVariable Long id) {return userService.deleteUserById(id);}@PutMappingpublic UserCUDResponse updateUser(@RequestBody User user) {// 调用Service层的修改方法return userService.updateUserById(user);}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web端云剪辑解决方案,BS架构私有化部署,安全可控

传统视频制作流程繁琐、耗时&#xff0c;且对专业设备和软件的高度依赖&#xff0c;常常让企业望而却步&#xff0c;美摄科技凭借其强大的技术实力和创新能力&#xff0c;推出了面向企业用户的Web端云剪辑解决方案&#xff0c;为企业提供一站式、高效、便捷的视频生产平台。 B…

【docker】在IDEA工具内,远程操作服务器上的docker

一&#xff0c;配置 在服务器上&#xff0c;对docker配置如下内容&#xff1a; vi /usr/lib/systemd/system/docker.service添加如下&#xff1a; -H tcp://0.0.0.0:2375重新加载&#xff0c;并重启docker&#xff1a; #重新加载配置 systemctl daemon-reload# 重启docker …

使用 IntelliJ IDEA 连接到达梦数据库(DM)

前言 达梦数据库是一款国产的关系型数据库管理系统&#xff0c;因其高性能和稳定性而被广泛应用于政府、金融等多个领域。本文将详细介绍如何在 IntelliJ IDEA 中配置并连接到达梦数据库。 准备工作 获取达梦JDBC驱动&#xff1a; 访问达梦在线服务平台网站或通过其他官方渠道…

SkyWalking 持久化链路数据

默认持久化 H2 数据库config/application.yml storage:selector: ${SW_STORAGE:h2} MySQL持久化 修改配置 MySQL 数据库config/application.yml storage:selector: ${SW_STORAGE:h2}mysql:properties:jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest&q…

基于yolov8的红外小目标无人机飞鸟检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的红外小目标无人机与飞鸟检测系统是一项集成了前沿技术的创新解决方案。该系统利用YOLOv8深度学习模型的强大目标检测能力&#xff0c;结合红外成像技术&#xff0c;实现了对小型无人机和飞鸟等低空飞行目标的快速、准确检测。 YOLOv8作为YOLO系列的…

Springboot与minio

一、介绍 Minio是一个简单易用的云存储服务&#xff0c;它让你可以轻松地把文件上传到互联网上&#xff0c;这样无论你在哪里&#xff0c;只要有网络&#xff0c;就能访问或分享这些文件。如果你想要从这个仓库里取出一张图片或一段视频&#xff0c;让网站的访客能看到或者下载…

How do you send files to the OpenAI API?

题意&#xff1a;你如何向 OpenAI API 发送文件 问题背景&#xff1a; For fun I wanted to try to make a tool to ask chatgpt to document rust files. I found an issue, in that the maximum message length the API allows seems to be 2048 characters. 为了好玩&…

【深度学习】(3)--损失函数

文章目录 损失函数一、L1Loss损失函数1. 定义2. 优缺点3. 应用 二、NLLLoss损失函数1. 定义与原理2. 优点与注意3. 应用 三、MSELoss损失函数1. 定义与原理2. 优点与注意3. 应用 四、BCELoss损失函数1. 定义与原理2. 优点与注意3. 应用 五、CrossEntropyLoss损失函数1. 定义与原…

K8S容器实例Pod安装curl-vim-telnet工具

在没有域名的情况下&#xff0c;有时候需要调试接口等需要此工具 安装curl、telnet、vim等 直接使用 apk add curlapk add vimapk add tennet

CMake 构建Qt程序弹出黑色控制台

CMake 构建Qt程序弹出黑色控制台

mysql 内存被打满记录

一&#xff1a;早上收到报警&#xff1a;提示&#xff1a;您的云数据库RDS的1个实例因存储空间满将被锁定&#xff0c;请关注实例的存储空间使用情况&#xff0c;可通过存储扩容或空间清理解除锁定。后续查看错误日志如下&#xff1a;磁盘没有空间了 没有多余的空间写binlog和…

STM32 单片机最小系统全解析

STM32 单片机最小系统全解析 本文详细介绍了 STM32 单片机最小系统&#xff0c;包括其各个组成部分及设计要点与注意事项。STM32 最小系统在嵌入式开发中至关重要&#xff0c;由电源、时钟、复位、调试接口和启动电路等组成。 在电源电路方面&#xff0c;采用 3.3V 直流电源供…

Golang | Leetcode Golang题解之第417题太平洋大西洋水流问题

题目&#xff1a; 题解&#xff1a; type pair struct{ x, y int } var dirs []pair{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}func pacificAtlantic(heights [][]int) (ans [][]int) {m, n : len(heights), len(heights[0])pacific : make([][]bool, m)atlantic : make([][]bool, …

AttributeError: ‘Sequential‘ object has no attribute ‘predict_classes‘如何解决

今天跟着书敲代码&#xff0c;报错&#xff1a; Sequential object has no attribute predict_classes&#xff0c;如图所示&#xff1a; 上网百度&#xff0c;发现predict_classes函数在新版本中已经删除了&#xff0c;需要使用 model.predict() 替代 model.predict_classes()…

基于springboot+vue超市管理系统

基于springbootvue超市管理系统 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本无人超市管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助使用者在…

AI运动小程序开发常见问题集锦一

截止到现在写博文时&#xff0c;我们的AI运动识别小程序插件已经迭代了23个版本&#xff0c;成功应用于健身、体育、体测、AR互动等场景&#xff1b;为了让正在集成或者计划进行功能扩展优化的用户&#xff0c;少走弯路、投入更少的开发资源&#xff0c;我们归集了一部分集中的…

统信服务器操作系统ade版【iostat】命令详解

统信服务器操作系统全版本iostat 安装、命令格式和命令参数 文章目录 功能概述功能介绍1.iostat安装2.iostat命令格式3.iostat命令参数 功能概述 iostat主要用与报告CPU统计信息和设备分区的io统计信息&#xff0c;iostat首次运行时显示自系统启动开始的各项统计信息&#xff…

vben admin vue后端权限控制登录失效后,vben admin获取登录过期信息并注销登录返回登录页

登录失效后&#xff0c;后端拦截器拦截并跳转到登录失效方法&#xff0c;该方法返回对应的code编码&#xff0c;如果报错跨域&#xff0c;加上跨域注解CrossOrigin ResponseBodyCrossOrigin //目标方法上加入这个解决跨域RequestMapping(value { "/tokentimeout"}…

IEEE Electronic Library(IEL)数据库文献检索下载介绍及个人获取IEEE文献途径

一、数据库介绍 IEEE&#xff08;The Institute of Electrical and Electronics Engineers&#xff0c;电气电子工程师学会&#xff09;是目前全球最大的非营利性专业技术学会&#xff0c;在全球160多个国家拥有超过45万名会员。IEEE在电气电子、计算机、半导体、通讯、电力能…

【Unity踩坑】UI Image的fillAmount不起作用

在游戏场景中&#xff0c;我们经常在界面上展示进度条&#xff0c;当然有各种形状的&#xff0c;线性的&#xff0c;长方形的&#xff0c;圆形&#xff0c;环形等等。 Unity中实现这种效果的话&#xff0c;最基本的方法说是改变Image的fillAmout属性。 如果你是初次使用UI Ima…