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

springboot--用户访问系统的增删改查记录

准备工作

创建springboot项目

增加模块为 Spring Web 、MySQL Driver、Spring Data JPA

springboot的启动类

@SpringBootApplication
public class SpringBootTestApplication {public static void main(String[] args) {SpringApplication.run(SpringBootTestApplication.class, args);}
}

配置数据库

# 应用服务 WEB 访问端口
server.port=8080
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/数据库名?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456#更新生成数据表
#???????
spring.jpa.hibernate.ddl-auto=update
#???sql
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.show-sql=true

创建业务逻辑层service、数据访问层repository、控制层进行创建

一、创建用户类

@Table(name="tb_user")
@Entity
public class User {//    主键自增  @GeneratedValue(strategy = GenerationType.IDENTITY)
//    表名和字段名隐射    @Column(name="user_id")@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name="user_id")private Integer userId;@Column(name="user_name")private String userName;@Column(name="pass_word")private String passWord;@Column(name="email")private  String email;//get set toString 省略。。
}

希望这个类与数据表进行连接使用@Table+@Entity注解 name为映射表名。@Id 注解 注释为主键ID

 @GeneratedValue(strategy = GenerationType.IDENTITY) 主键自增

@Column(name="user_id") 映射字段名  表中为user_id,代码中为驼峰命名法

二 创建对外访问接口 Usercontroller

@RestController //接口方法返回对象 转换成json文本
@RequestMapping("/user")  //接口映射 localhost:8080/user/**
public class Usercontroller {
}

使用@PostMapping注解  Post请求

新增

public String add (User user){

}

传递一个user对象 进行数据库新增  

但是会在pojo中新建一个dto文件夹,使用一个UserDto类  

  • User 实体类可能包含数据库自动生成的字段(如 idcreateTime),这些字段不应由前端传递。
  • DTO 可以针对不同场景(如注册、登录)定义不同的字段,而 User 实体类通常对应完整的数据库表结构。
  • User 实体类可能包含敏感字段(如密码哈希、盐值、内部状态字段),直接返回给前端会导致安全问题
  • User 实体类可能包含数据库相关字段,不适合前端校验
public String addUser(@RequestBody UserDto user){//RequestBody  传进来的值为json 自动转换为一个对象return "success";
}

三 调用业务逻辑类

创建业务逻辑类的接口  

public interface IUserService {}

使用@Service注册成为一个bean就可以在

public class Usercontroller {@AutowiredIUserService userService;
}进行自动装配
@Service
public class UserService implements IUserService{}

调用相关的add方法进行添加

    @PostMapping("add")
public String addUser(@RequestBody UserDto user){userService.add(user);return "success";
}

这个时候的add方法还没有设置  现在接口类中设置 再到实现类中写入

这时候再设置一个数据访问类方法 在repository中,因为是基础的增删查改 可以直接接口继承CrudRepository这个类   两个参数为 类名和主键ID  注解成为一个Bean

@Repository  //spring的bean
public interface UserRepository extends CrudRepository<User,Integer> {}

先装配  再将获取的UserDto类参数写入。因为接口中需要的为User类,需要调用 

User userPojo=new User();BeanUtils.copyProperties(user,userPojo);

进行转换。因为save方法会返回一个对象所以修改方法返回值

@Service
public class UserService implements IUserService{@AutowiredUserRepository userRepository;@Overridepublic User add(UserDto user) {
//        调用数据访问类方法User userPojo=new User();BeanUtils.copyProperties(user,userPojo);return userRepository.save(userPojo);}
//    实现类
}

四 返回值方法的封装

成功

返回值需要message ,code,data为基本数据

其中data不知道什么类型 需要使用泛型进行设置

如果调用方法成功 就直接调用success方法

public class ResponseMessage<T>{private Integer code;//200 500  404private String message;private  T data;//使用泛型 因为是通用返回不知道会传入什么数据类型
//成功时候的返回public static<T> ResponseMessage<T> success(T data){ResponseMessage responseMessage = new ResponseMessage();responseMessage.setCode(200);responseMessage.setMessage("success");responseMessage.setData(data);return responseMessage;}
getset方法省略
}

在各个方法中进行返回值封装调用

@Service
public class UserService implements IUserService{@AutowiredUserRepository userRepository;@Overridepublic User add(UserDto user) {
//        调用数据访问类方法User userPojo=new User();BeanUtils.copyProperties(user,userPojo);return userRepository.save(userPojo);}
//    实现类
}

失败  

设置参数校验

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>

在Dto中进行设置

 public class UserDto {@NotBlank(message = "用户名不能为空")private String userName;@NotBlank(message = "密码不能为空")@Length(min = 6,max = 12)private String passWord;@Email(message = "格式不正确")private  String email;}

在中设置validated注解 参数必填项的注解进行校验

@PostMapping("add")
public ResponseMessage addUser(@Validated @RequestBody UserDto user){userService.add(user);return ResponseMessage.success(null);
}

---------------------

用户查询

需要传入ID进行表内数据查询

先在controller中设置基础调用

@GetMapping("/{userId}")
public ResponseMessage searchUser( @PathVariable Integer userId){User userNew =userService.SearchById(userId);return ResponseMessage.success(userNew);
}

使用get请求  使用注解将传入的id进行配置   调用实现类方法searchById

接口中设置User SearchById(Integer userId)

重写查询方法

    @Overridepublic User SearchById(Integer userId) {return userRepository.findById(userId).orElseThrow(() ->new RuntimeException("用户不存在") // 直接 new RuntimeException);}

-------------------

修改方法

需要将用户类传入根据ID进行修改 所以同样调用save方法

在controller中设置基础调用

@PutMapping("edit")public ResponseMessage edit(@Validated @RequestBody UserEditDto user){User UserNew=userService.edit(user);return ResponseMessage.success(UserNew);
}

因为是传入的用户以及id 需要信息调用

在dto类中新增一个id和getset方法  或者新写一个DTO类

接口中User edit(UserEditDto user);

实现方法

    @Overridepublic User edit(UserEditDto user) {User userPojo=new User();BeanUtils.copyProperties(user,userPojo);return userRepository.save(userPojo);}

------------------------

删除

一样的操作 只是换成了传入yonghuid调用deltedById方法

http://www.lryc.cn/news/626896.html

相关文章:

  • 静/动态库 IIC(arm) day58
  • Docker在Linux中安装与使用教程
  • 【Android】Serializable和Parcelable序列化对象:传递自定义类数据
  • 无人机抗噪模块技术概述!
  • AI + 金融领域 + 落地典型案例
  • AI +金融 = 七大核心维度+ 落地典型困难
  • 基于深度学习CenterPoint的3D目标检测部署实战
  • 《GPT-OSS 模型全解析:OpenAI 回归开源的 Mixture-of-Experts 之路》
  • 使用 FastAPI 的 WebSockets 和 Elasticsearch 来构建实时应用
  • shell脚本——搜索某个目录下带指定前缀的文件
  • 标准解读——71页2025《数字化转型管理 参考架构》【附全文阅读】
  • C++11中的互斥锁,条件变量,生产者-消费者示例
  • Cyberduck (FTP和SFTP工具) v9.2.3.43590
  • SpringBoot3后端项目介绍:mybig-event
  • 华为云之基于鲲鹏弹性云服务器部署openGauss数据库【玩转华为云】
  • 网页作品惊艳亮相!这个浪浪山小妖怪网站太治愈了!
  • AutoGLM2.0背后的云手机和虚拟机分析(非使用案例)
  • 百度地图 添加热区(Hotspot)
  • Ubuntu_22.04安装文档
  • 应用在运行时,向用户索取(相机、存储)等权限,未同步告知权限申请的使用目的,不符合相关法律法规要求--教你如何解决华为市场上架难题
  • 【数据库】Oracle学习笔记整理之六:ORACLE体系结构 - 重做日志文件与归档日志文件(Redo Log Files Archive Logs)
  • Ubuntu 虚拟显示器自动控制服务设置(有无显示器的切换)
  • 机器学习数据预处理总结(复习:Pandas, 学习:preprocessing)
  • iOS 应用迭代与上架节奏管理 从测试包到正式发布的全流程实践
  • 数据预处理:机器学习中的关键步骤
  • 【iOS】NSRunLoop
  • 25_基于深度学习的行人检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • 解决程序无响应自动重启
  • 织梦素材站网站源码 资源付费下载交易平台源码
  • DeepSeek V3.1 完整评测分析:2025年AI编程新标杆