springboot简单应用
快速开发Springboot项目实现简单的增删改查,前期需要准备:idea与postman安装 Maven,MySQL(8),JDK(21)
目录
前言
springboot 使用3.0+版本,JDK使用21,MySQL使用8版本 开发环境IDEA使用2024版本
springboot内嵌了Tomcat,包含spring框架,提供starter 简化Maven配置。这里直接使用JPA作为ORM,不引入mybatis。CRUD采用rest(@PostMapping,@GetMapping("/{userId}",@PutMapping,@DeleteMapping("/{userId}")形式)风格。
相关代码组织结构:controller service repository(dao) pojo(entity) exception等
一、Spring Boot项目创建
在IDEA中点击 NEW->Project->Spring Boot 开始创建 Spring Boot 项目,Type选择Maven,JDK版本选择21,相关配置如图:
点击Next后选择Web中的Spring Web,SQL中的Spring Data JPA 和MySQL Driver后点击create
在本测试项目中,直接使用JPA作为DAO层技术支撑。
二、Spring Boot 简单增删改查
1.开发前相关文件配置
新建项目首先确定各个层级代码包名,之后编辑对应propertIes文件
application.properties编辑信息(state_owned_assets_supervise是自建数据库名):
spring.application.name=Accountability # 默认端口号8080,这里改为8088 server.port=8088 spring.datasource.url=jdbc:mysql://localhost:3306/state_owned_assets_supervise?serverTimezone=UTC spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#show spring.jpa.show-sql=true #format_sql spring.jpa.properties.hibernate.format_sql=true #auto update db table struct spring.jpa.hibernate.ddl-auto=update
相关项目代码结构如图:
2.编辑相关代码
直接点击启动 AccountabilityApplication类
相关代码结构如图:
在三层模型中,使用repository链接数据库对数据CRUD,之后Service层调用数据访问层进行组合,controller层调用Service层获得结果后返回给前台。
由于使用的是JPA可以直接新建实体类通过实体类自动在MySQL中建表。代码如下:
package org.jac.accountability.pojo;import jakarta.persistence.*;@Table(name = "db_user")
@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "user_id")private Integer userId;@Column(name = "user_name")private String userName;private String password;private String email;public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return "User{" +"userId=" +userId+"userName" + userName+"password" +password+"email" +email+"}";}
}
相关注解:
@Table(name = "db_user") MySQL数据库中对应实体类名称为 db_user @Entity 表明实体类 @Id 表明该ID字段为主键 @GeneratedValue(strategy = GenerationType.IDENTITY) 主键ID自增策略 @Column(name = "user_id") MySQL数据库字段使用蛇形命名,需要变更Java类中命名方式 strategy* GenerationType.IDENTITY :自增,mysql 底层数据库必须支持自动增长(底层数据库支持的自动增长方式,对id自增)* GenerationType.SEQUENCE : 序列,oracle 底层数据库必须支持序列* GenerationType.TABLE : jpa提供的一种机制,通过一张数据库表的形式帮助我们完成主键自增* GenerationType.AUTO : 由程序自动的帮助我们选择主键生成策略* @Column:配置属性和字段的映射关系* name:数据库表中字段的名称
2.1 编写controller层
import ....;@RestController //对请求端返回JSON数据格式
@RequestMapping("/user") //localhost:8088/user/....
public class UserController { // rest crud//@Autowiredprivate UserService userService;@PostMappingpublic ResponseMessage add(@Validated @RequestBody UserDTO userDto) {User user = userService.addUser(userDto);return ResponseMessage.sucess(user) ;}//@GetMapping("/{userId}")public ResponseMessage get(@PathVariable Integer userId) {User user = userService.getUser(userId);return ResponseMessage.sucess(user) ;}//@PutMappingpublic ResponseMessage update(@Validated @RequestBody UserEditDTO userEditDTO) {User user = userService.editUser(userEditDTO);return ResponseMessage.sucess(user);}//@DeleteMapping("/{userId}")public ResponseMessage delete(@PathVariable Integer userId) {userService.deleteUser(userId);return ResponseMessage.sucess(null);}
}
在 以上代码中,通过向外暴露不同类型http接口(post,get,put,delete)的方式实现增查改删。 涉及发送body内容(put,post)使用注解@RequestBody ; 通过路径中参数传值使用注解@PathVariable;参数校验使用注解 @Validated ;
@RestController //对请求端返回JSON数据格式处理
@RequestMapping("/user") //生成对应的URL localhost:8088/user/....
相关注解下的方法返回 类 ResponseMessage 统一返回message
2.2编写service层
import ...
@Service
public class UserService implements IUserService {@Autowiredprivate UserRepository userRepository;@Overridepublic User addUser(UserDTO user) {User userPojo = new User();BeanUtils.copyProperties(user,userPojo);return userRepository.save(userPojo);}@Overridepublic User getUser(Integer userId) {return userRepository.findById(userId).orElseThrow(()->{throw new IllegalArgumentException("user not found") ;});}@Overridepublic User editUser(UserEditDTO user) {User userPojo = new User();BeanUtils.copyProperties(user,userPojo);return userRepository.save(userPojo);}@Overridepublic void deleteUser(Integer userId) {userRepository.deleteById(userId);}}
UserDTO 类和 UserEditDTO类内容一致,UserEditDTO比UserDTO 多一个ID 字段。BeanUtils.copyProperties(user,userPojo);使用该方法将传入的DTO内容复制到POJO中再通过使用DAO层处理数据。
2.3 统一返回消息 ResponseMessage
该类中定义一个方法
public static <T> ResponseMessage<T> sucess(T data) {ResponseMessage response = new ResponseMessage();response.setCode(HttpStatus.OK.value());response.setMessage("success");response.setData(data);return response;}
controller类中使用该方法实现将统一返回的data封装后返回信息。
2.4 repository层(DAO)
使用了JPA后直接继承类 后直接进行简单的增删改查 不必进行直接操作
public interface UserRepository extends CrudRepository<User,Integer> {User getUsersByUserId(Integer userId);
}