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
实体类可能包含数据库自动生成的字段(如id
、createTime
),这些字段不应由前端传递。- 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方法