后端SpringBoot学习项目-用户管理-增删改查

最终代码结构

仓库地址
在这里插入图片描述

Entity文件

数据库表设计

在这里插入图片描述

entity层实现

文件创建

● 创建entity文件夹
● 在entity层创建Java类,名字为User (关键字不可使用)

代码实现
package com.example.drhtspringboot.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;import java.util.Date;
@Data
@TableName("user")
public class User {/*** 主键ID* */@TableId(value = "id",type = IdType.AUTO)private Long id;/*** 用户名* */private String username;/*** 昵称* */private String nickname;/*** 密码* */private String password;/*** 性别* */private Integer gender;/*** 头像* */private String avatar;/*** 角色* */private Integer role;/*** 学历* */private Integer education;/*** 学校* */private String school;/*** 班级* */@TableField("banjiId")private Integer banjiId;/*** 创建时间* */@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")@TableField("createdAt")private Date createdAt;/*** 更新时间* */@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")@TableField("updatedAt")private Date updatedAt;
}

注解解释

@JsonFormat

目的是为了在接口请求数据返回时修改时间的返回格式

@Data

● 由Lombok库提供
● 会自动为实体类生成getter、setter、equals、hashCode和toString方法。

@TableName

● 指定实体类映射到数据库的具体表名

@TableId

● 标记实体类中的主键字段
● 设置一个复合主键时,可以使用 @TableId 注解的属性type来指定主键生成策略

@TableField

● 标记实体类中的字段与数据库表中的字段的映射关系
● 如果字段名和数据库列名相同,可以不用写 @TableField 注解

驼峰字段

如果数据表中的字段是驼峰形式,在接口方法查询数据时候驼峰形式字段会变为下划线形式(createdAt 变为 created_at),所以需要通过@TableField注解来使其保持一致

Mapper文件

mapper层实现

文件创建

● 创建mapper文件夹
● 在mapper层创建Java接口,名字为UserMapper

代码实现
package com.example.drhtspringboot.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.drhtspringboot.entity.User;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper extends BaseMapper<User> {
}

注解解释

BaseMapper

● MyBatis-Plus提供的一个泛型接口,包含了基础的增删改查等CRUD操作
● 可以简化对数据访问的开发

@Mapper

● 省略了xml文件的配置过程

service文件

初版实现暂不补充

controller文件

文件创建

● 创建controller文件夹
● 在controller层创建Java接口,名字为UserController

代码实现

请求结果类封装
package com.example.drhtspringboot.common;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result<T> {private String code;private String msg;private T data;public Result(T data) {this.data = data;}public static Result success() {Result result = new Result<>();result.setCode("200");result.setMsg("成功");return result;}public static <T> Result<T> success(T data) {Result<T> result = new Result<>(data);result.setCode("200");result.setMsg("成功");result.setData(data);return result;}public static Result error(String code, String msg) {Result result = new Result<>();result.setCode(code);result.setMsg(msg);return result;}}
查询所有

没有任何查询参数,查询表中所有数据

/*** 获取用户列表* 通过请求映射 getList,处理获取用户列表的请求* 此方法使用 QueryWrapper 对象查询数据库中的所有用户,并返回查询结果* 如果查询结果不为空,则返回成功结果和用户列表,否则返回错误信息*/
@RequestMapping("getListAll")
public Result<?> getListAll(){// 使用 QueryWrapper 进行查询,获取用户列表List<User> userList =  userMapper.selectList(new QueryWrapper<>());// 判断查询结果是否为空if(userList != null){// 查询成功,返回用户列表return Result.success(userList);} else {// 查询失败,返回错误信息return Result.error("500", "查询失败");}
}
分页查询

分页查询默认会出现一个问题: 查询出的数据records内容正常,但是total数量为0,需要进行一个插件的配置

  • 插件配置
package com.example.drhtspringboot.common;import com.baomidou.mybatisplus.annotation.DbType;
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的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}
  • 分页接口实现
/*** 根据条件获取用户列表** @param page 页码,指定从哪一页开始查询* @param size 每页大小,即每页返回的记录数* @param username 用户名,用于模糊查询* @param gender 性别,用于精确查询* @param role 角色ID,用于精确查询* @return 返回一个Result对象,包含查询结果或错误信息*/@RequestMapping("getList")public Result<?> getList(Integer page,Integer size,String username,Integer gender,Integer role){// 创建Page对象,用于分页查询Page<User> userPage = new Page<>(page,size);// 创建QueryWrapper对象,用于构建查询条件QueryWrapper<User> qw = new QueryWrapper<>();if(StringUtils.isNotBlank(username)) {qw.like("username",username); // 模糊查询用户名}if(gender != null) {qw.eq("gender",gender); // 精确查询性别}if(role != null) {qw.eq("role", role); // 精确查询角色}// 执行分页查询IPage<User> userPageList = userMapper.selectPage(userPage,qw);// 判断查询结果是否为空if(userPageList != null) {return Result.success(userPageList); // 查询成功,返回结果} else {return Result.error("500", "查询失败"); // 查询失败,返回错误信息}}
新增用户
/*** 添加新用户** @param user 用户对象,包含用户的基本信息* @return 插入操作的结果,成功或失败*/
@PostMapping("addUser")
public Result<?> addUser(@RequestBody User user){// 设置用户创建时间和更新时间为当前时间user.setCreatedAt(new Date());user.setUpdatedAt(new Date());// 执行用户信息的插入操作int i = userMapper.insert(user);// 根据插入结果返回成功或失败的信息if(i > 0) {return Result.success();} else {// 查询失败,返回错误信息return Result.error("500", "新增失败");}
}
更新用户
/*** 处理用户更新请求* 该方法通过POST请求接收用户数据,并尝试在数据库中更新该用户的信息** @param user 用户对象,包含要更新的用户信息* @return 返回更新操作的结果,成功或失败*/
@PostMapping("updateUser")
public Result<?> updateUser(@RequestBody User user){// 根据用户ID更新用户信息int i = userMapper.updateById(user);// 判断更新操作是否成功if(i > 0) {// 如果更新成功,返回成功结果return Result.success();} else {// 如果更新失败,返回错误信息return Result.error("500", "更新失败");}
}
删除用户
/*** 删除用户信息* 该方法通过POST请求接收用户信息,并根据用户ID删除用户** @param user 用户对象,包含要删除的用户ID* @return 删除操作的结果,如果删除成功返回成功结果,否则返回错误信息*/
@PostMapping("delUser")
public Result<?> deleteUser(@RequestBody User user){// 根据用户ID删除用户信息int i = userMapper.deleteById(user.getId());// 判断删除操作是否成功if(i > 0) {// 如果删除成功,返回成功结果return Result.success();} else {// 如果删除失败,返回错误信息return Result.error("500", "删除失败");}
}

整体代码

package com.example.drhtspringboot.contoller;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.drhtspringboot.common.Result;
import com.example.drhtspringboot.entity.User;
import com.example.drhtspringboot.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;
import java.util.List;@RestController
@RequestMapping("user")
public class UserController {@Autowiredprivate UserMapper userMapper;/*** 根据条件获取用户列表** @param page 页码,指定从哪一页开始查询* @param size 每页大小,即每页返回的记录数* @param username 用户名,用于模糊查询* @param gender 性别,用于精确查询* @param role 角色ID,用于精确查询* @return 返回一个Result对象,包含查询结果或错误信息*/@RequestMapping("getList")public Result<?> getList(Integer page,Integer size,String username,Integer gender,Integer role){// 创建Page对象,用于分页查询Page<User> userPage = new Page<>(page,size);// 创建QueryWrapper对象,用于构建查询条件QueryWrapper<User> qw = new QueryWrapper<>();if(StringUtils.isNotBlank(username)) {qw.like("username",username); // 模糊查询用户名}if(gender != null) {qw.eq("gender",gender); // 精确查询性别}if(role != null) {qw.eq("role", role); // 精确查询角色}// 执行分页查询IPage<User> userPageList = userMapper.selectPage(userPage,qw);// 判断查询结果是否为空if(userPageList != null) {return Result.success(userPageList); // 查询成功,返回结果} else {return Result.error("500", "查询失败"); // 查询失败,返回错误信息}}/*** 获取用户列表* 通过请求映射 getList,处理获取用户列表的请求* 此方法使用 QueryWrapper 对象查询数据库中的所有用户,并返回查询结果* 如果查询结果不为空,则返回成功结果和用户列表,否则返回错误信息*/@RequestMapping("getListAll")public Result<?> getListAll(){// 使用 QueryWrapper 进行查询,获取用户列表List<User> userList =  userMapper.selectList(new QueryWrapper<>());// 判断查询结果是否为空if(userList != null){// 查询成功,返回用户列表return Result.success(userList);} else {// 查询失败,返回错误信息return Result.error("500", "查询失败");}}/*** 添加新用户** @param user 用户对象,包含用户的基本信息* @return 插入操作的结果,成功或失败*/@PostMapping("addUser")public Result<?> addUser(@RequestBody User user){// 设置用户创建时间和更新时间为当前时间user.setCreatedAt(new Date());user.setUpdatedAt(new Date());// 执行用户信息的插入操作int i = userMapper.insert(user);// 根据插入结果返回成功或失败的信息if(i > 0) {return Result.success();} else {// 查询失败,返回错误信息return Result.error("500", "新增失败");}}/*** 删除用户信息* 该方法通过POST请求接收用户信息,并根据用户ID删除用户** @param user 用户对象,包含要删除的用户ID* @return 删除操作的结果,如果删除成功返回成功结果,否则返回错误信息*/@PostMapping("delUser")public Result<?> deleteUser(@RequestBody User user){// 根据用户ID删除用户信息int i = userMapper.deleteById(user.getId());// 判断删除操作是否成功if(i > 0) {// 如果删除成功,返回成功结果return Result.success();} else {// 如果删除失败,返回错误信息return Result.error("500", "删除失败");}}/*** 处理用户更新请求* 该方法通过POST请求接收用户数据,并尝试在数据库中更新该用户的信息** @param user 用户对象,包含要更新的用户信息* @return 返回更新操作的结果,成功或失败*/@PostMapping("updateUser")public Result<?> updateUser(@RequestBody User user){// 根据用户ID更新用户信息int i = userMapper.updateById(user);// 判断更新操作是否成功if(i > 0) {// 如果更新成功,返回成功结果return Result.success();} else {// 如果更新失败,返回错误信息return Result.error("500", "更新失败");}}
}

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

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

相关文章

网络管理之---3种网络模式配置

目标&#xff1a; 了解几个概念&#xff1a; 1.什么是IP&#xff1f;什么是IP地址&#xff1f; 2.什么是桥接、NAT、仅主机模式 3.端口&#xff1f; 4.什么是网络接口命名规则 5.网络管理器 IP&#xff1a;指网络之间互联的协议&#xff0c;是TCP/IP 体系中的网络协议 I…

uniapp解析蓝牙设备响应数据bug

本文章为了解决《uniapp 与蓝牙设备收发指令详细步骤(完整项目版)》中第十步的Array 解析成 number函数bug 1、原代码说明 function array16_to_number(arrayValue) {const newArray arrayValue.filter(item > String(item) ! 00 || String(item) ! 0)const _number16 ne…

【测试框架篇】单元测试框架pytest(3):用例执行参数详解

一、前言 上一篇内容介绍了用例编写的规则以及执行用例&#xff0c;执行用例时我们发现有些print输出内容&#xff0c;结果没有给我们展示&#xff0c;这是因为什么原因呢&#xff1f;接下来我们会针对这些问题进行阐述。 二、参数大全 我们可以在cmd中通过输入 pytest -h 或…

再见 阿里巴巴EasyExcel替代品EasyExcel-Plus即将诞生

最近阿里发布公告通知&#xff0c;停止对EasyExcel 更新和维护&#xff0c;EasyExcel 是一款知名的 Java Excel 工具库&#xff0c;由阿里巴巴开源&#xff0c;作者是玉霄&#xff0c;在 GitHub 上有 30k stars、7.5k forks。 据了解&#xff0c;EasyExcel作者玉霄)去年已经从…

VBA08-if语句

一、单行 If 语句 If x > 10 Then MsgBox "x is greater than 10"二、多行 If...Then...End If 语句 If x > 10 ThenMsgBox "x is greater than 10"y x 5 End If 三、If...Then...Else 语句 If condition Then 当条件为真时执行的代码块stateme…

闯关leetcode——202. Happy Number

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/happy-number/description/ 内容 Write an algorithm to determine if a number n is happy. A happy number is a number defined by the following process: Starting with any positive inte…

Apache Kylin 添加MSSQL等第三方数据源(MySQL 亦可)

Apache Kylin 添加MSSQL等数据源 Kylin 版本要求是3 PS&#xff1a;根据Kylin文档kylin 4.0和kylin 3.1的区别中所示&#xff1a; Kylin 3.1.0 支持 Kafka/Hive/JDBC 作为数据源Kylin 4.0 支持 Hive/CSV 作为数据源 官方文档请参考:Setup JDBC Data Source 第三方文档参考…

工位管理优化:Spring Boot企业级系统

3系统分析 3.1可行性分析 通过对本企业级工位管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本企业级工位管理系统采用SSM框架&#xff0c;JAVA作为开…

java双向链表解析实现双向链表的创建含代码

双向链表 一.双向链表二.创建MyListCode类实现双向链表创建一.AddFirst创建&#xff08;头插法&#xff09;二.AddLast创建&#xff08;尾叉法&#xff09;三.size四.remove(指定任意节点的首位删除)五.removeAll(包含任意属性值的所有删除)六.AddIndex(给任意位置添加一个节点…

flink 同步oracle11g数据表到pg库

1. 关闭防火墙和selinux systemctl stop firewalld systemctl disable firewalld systemctl status firewalldvi /etc/selinux/config 修改为disabled2.安装java8 yum list java-1.8* yum install java-1.8.0-openjdk* -yjava -version3.下载和部署postgresql 看需求安装pg库…

用接地气的例子趣谈 WWDC 24 全新的 Swift Testing 入门(三)

概述 从 WWDC 24 开始&#xff0c;苹果推出了全新的测试机制&#xff1a;Swift Testing。利用它我们可以大幅度简化之前“老态龙钟”的 XCTest 编码范式&#xff0c;并且使得单元测试更加灵动自由&#xff0c;更符合 Swift 语言的优雅品味。 在这里我们会和大家一起初涉并领略…

Vue 2 —Vue Router 页面导航和参数传递

当从A页面跳转到B页面的时候把数据也一起传递过去&#xff0c;可用Vue Router 功能&#xff1a; 一、. this.$router.push 方法 Vue Router 是 Vue.js 的官方路由管理器&#xff0c;允许你在应用中进行页面导航&#xff08;即跳转到不同的 URL 路径&#xff09;。 this.$rout…

【AI声音克隆整合包及教程】第二代GPT-SoVITS V2:技术、应用与伦理思考

一、引言 在当今科技迅速发展的时代&#xff0c;声音克隆技术成为人工智能领域的一个备受瞩目的分支。GPT-SoVITS V2作为一种声音克隆工具&#xff0c;正逐渐进入人们的视野&#xff0c;它在多个领域展现出巨大的潜力&#xff0c;同时也引发了一系列值得深入探讨的问题。本文旨…

ssm092基于Tomcat技术的车库智能管理平台+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;车库智能管理平台设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本车库智能管理平台…

11 Oracle Golden Gate 高可用解决方案:Golden Gate 助力企业保障业务连续性

文章目录 Oracle Golden Gate 高可用解决方案&#xff1a;Golden Gate 助力企业保障业务连续性一、Oracle Golden Gate基本概念二、设计异地灾备策略2.1 需求分析2.2 网络规划2.3 部署架构 三、实施异地灾备策略3.1 环境准备3.2 配置Golden Gate3.3 验证与测试 四、数据保护策略…

【NLP】使用 PyTorch 从头构建自己的大型语言模型 (LLM)

读完这篇文章后&#xff0c;你会取得什么成就&#xff1f;你将能够自己构建和训练大型语言模型 (LLM)&#xff0c;同时与我一起编写代码。虽然我们正在构建一个将任何给定文本从英语翻译成马来语的 LLM&#xff0c;但你可以轻松地修改此 LLM 架构以用于其他语言翻译任务。 LLM…

绘制3D图

一个 3D 函数的表面图&#xff0c;其中包含向量场。 Python 代码示例&#xff0c;使用 matplotlib 和 numpy 库来绘制类似的图。 python 复制代码 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D# 生成网格 x np.linspace(-…

MATLAB实战 利用1D-DCGAN生成光谱或信号数据

0.前言 在光谱学或信号处理领域&#xff0c;获取大量高质量的数据可能是一项挑战。利用DCGAN迁移对抗生成光谱或信号数据&#xff0c;可以有效地增加数据集的多样性&#xff0c;提高模型的泛化能力。 该实战项目提供了所有源代码与测试数据&#xff0c;旨在帮助学者快速地掌握了…

华为:hcia综合实验

一、拓扑图 二、实验要求 1. pc地址请自行规划&#xff0c;vlan已给出 2. 服务器地址自行规划&#xff0c;vlan&#xff0c;网段已给出 3. 交换机互联链路捆绑保证冗余性 4. 内网pc网关集中于核心交换机&#xff0c;交换机vlan 40互联路由器 ,地址网段已给出 5.配置静态路由实…