From 92b1913dd286291cb66a2f88cae9445fead77299 Mon Sep 17 00:00:00 2001 From: xuliangchao Date: Wed, 29 Apr 2026 10:24:03 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20Swagger=20?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=B8=8E=E7=94=A8=E6=88=B7=20CRUD=20?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E9=9B=86=E6=88=90=20MySQL=20?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: aider (openai/deepseek-v4-pro) --- pom.xml | 22 ++++++- .../example/demo/config/SwaggerConfig.java | 19 ++++++ .../demo/controller/UserController.java | 56 +++++++++++++++++ .../java/com/example/demo/entity/User.java | 61 +++++++++++++++++++ .../demo/repository/UserRepository.java | 9 +++ .../com/example/demo/service/UserService.java | 32 ++++++++++ src/main/resources/application.yml | 16 ++++- 7 files changed, 213 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/example/demo/config/SwaggerConfig.java create mode 100644 src/main/java/com/example/demo/controller/UserController.java create mode 100644 src/main/java/com/example/demo/entity/User.java create mode 100644 src/main/java/com/example/demo/repository/UserRepository.java create mode 100644 src/main/java/com/example/demo/service/UserService.java diff --git a/pom.xml b/pom.xml index ac078c5..b3791f8 100644 --- a/pom.xml +++ b/pom.xml @@ -35,6 +35,26 @@ spring-boot-starter-test test + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + + mysql + mysql-connector-java + runtime + + + + + org.springdoc + springdoc-openapi-ui + 1.6.14 + @@ -46,4 +66,4 @@ - \ No newline at end of file + diff --git a/src/main/java/com/example/demo/config/SwaggerConfig.java b/src/main/java/com/example/demo/config/SwaggerConfig.java new file mode 100644 index 0000000..fbf0eb7 --- /dev/null +++ b/src/main/java/com/example/demo/config/SwaggerConfig.java @@ -0,0 +1,19 @@ +package com.example.demo.config; + +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class SwaggerConfig { + + @Bean + public OpenAPI customOpenAPI() { + return new OpenAPI() + .info(new Info() + .title("Demo API") + .version("1.0") + .description("用户信息管理接口")); + } +} diff --git a/src/main/java/com/example/demo/controller/UserController.java b/src/main/java/com/example/demo/controller/UserController.java new file mode 100644 index 0000000..e8c773f --- /dev/null +++ b/src/main/java/com/example/demo/controller/UserController.java @@ -0,0 +1,56 @@ +package com.example.demo.controller; + +import com.example.demo.entity.User; +import com.example.demo.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/users") +public class UserController { + + @Autowired + private UserService userService; + + @GetMapping + public List list() { + return userService.findAll(); + } + + @GetMapping("/{id}") + public ResponseEntity getById(@PathVariable Long id) { + return userService.findById(id) + .map(ResponseEntity::ok) + .orElse(ResponseEntity.notFound().build()); + } + + @PostMapping + public User create(@RequestBody User user) { + return userService.save(user); + } + + @PutMapping("/{id}") + public ResponseEntity update(@PathVariable Long id, @RequestBody User user) { + return userService.findById(id) + .map(existing -> { + existing.setName(user.getName()); + existing.setEmail(user.getEmail()); + existing.setAge(user.getAge()); + return ResponseEntity.ok(userService.save(existing)); + }) + .orElse(ResponseEntity.notFound().build()); + } + + @DeleteMapping("/{id}") + public ResponseEntity delete(@PathVariable Long id) { + if (userService.findById(id).isPresent()) { + userService.deleteById(id); + return ResponseEntity.noContent().build(); + } else { + return ResponseEntity.notFound().build(); + } + } +} diff --git a/src/main/java/com/example/demo/entity/User.java b/src/main/java/com/example/demo/entity/User.java new file mode 100644 index 0000000..e66dcca --- /dev/null +++ b/src/main/java/com/example/demo/entity/User.java @@ -0,0 +1,61 @@ +package com.example.demo.entity; + +import javax.persistence.*; + +@Entity +@Table(name = "t_user") +public class User { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false) + private String name; + + @Column(nullable = false) + private String email; + + private Integer age; + + public User() { + } + + public User(String name, String email, Integer age) { + this.name = name; + this.email = email; + this.age = age; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Integer getAge() { + return age; + } + + public void setAge(Integer age) { + this.age = age; + } +} diff --git a/src/main/java/com/example/demo/repository/UserRepository.java b/src/main/java/com/example/demo/repository/UserRepository.java new file mode 100644 index 0000000..db7caa4 --- /dev/null +++ b/src/main/java/com/example/demo/repository/UserRepository.java @@ -0,0 +1,9 @@ +package com.example.demo.repository; + +import com.example.demo.entity.User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/demo/service/UserService.java b/src/main/java/com/example/demo/service/UserService.java new file mode 100644 index 0000000..2f29240 --- /dev/null +++ b/src/main/java/com/example/demo/service/UserService.java @@ -0,0 +1,32 @@ +package com.example.demo.service; + +import com.example.demo.entity.User; +import com.example.demo.repository.UserRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +public class UserService { + + @Autowired + private UserRepository userRepository; + + public List findAll() { + return userRepository.findAll(); + } + + public Optional findById(Long id) { + return userRepository.findById(id); + } + + public User save(User user) { + return userRepository.save(user); + } + + public void deleteById(Long id) { + userRepository.deleteById(id); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 47fbb02..7b37a66 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,2 +1,16 @@ server: - port: 8080 \ No newline at end of file + port: 8080 + +spring: + datasource: + url: jdbc:mysql://localhost:3306/demo?useSSL=false&characterEncoding=utf8&serverTimezone=UTC + username: root + password: 123456 + driver-class-name: com.mysql.cj.jdbc.Driver + jpa: + hibernate: + ddl-auto: update + show-sql: true + properties: + hibernate: + dialect: org.hibernate.dialect.MySQL8Dialect