From 28afd9565c8c8f57f97a78f65bf9aa451877643d Mon Sep 17 00:00:00 2001 From: Vks Date: Mon, 3 Mar 2025 10:36:26 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E6=AC=A1=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E5=90=8E=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assignments/config/SwaggerConfig.java | 14 +-- Assignment2/backend/Assignments/pom.xml | 93 +++++++++++++++++++ .../Assignments/AssignmentsApplication.java | 13 +++ .../Assignments/config/SwaggerConfig.java | 18 ++++ .../controller/UserController.java | 84 +++++++++++++++++ .../Assignments/mapper/UserMapper.java | 24 +++++ .../cyberlanting/Assignments/pojo/User.java | 12 +++ .../Assignments/service/UserService.java | 34 +++++++ .../src/main/resources/application.yaml | 16 ++++ .../src/main/resources/mapper/UserMapper.xml | 14 +++ .../AssignmentsApplicationTests.java | 88 ++++++++++++++++++ 11 files changed, 403 insertions(+), 7 deletions(-) create mode 100644 Assignment2/backend/Assignments/pom.xml create mode 100644 Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/AssignmentsApplication.java create mode 100644 Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/config/SwaggerConfig.java create mode 100644 Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/controller/UserController.java create mode 100644 Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/mapper/UserMapper.java create mode 100644 Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/pojo/User.java create mode 100644 Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/service/UserService.java create mode 100644 Assignment2/backend/Assignments/src/main/resources/application.yaml create mode 100644 Assignment2/backend/Assignments/src/main/resources/mapper/UserMapper.xml create mode 100644 Assignment2/backend/Assignments/src/test/java/com/cyberlanting/Assignments/AssignmentsApplicationTests.java diff --git a/Assignment1/backend/Assignments/src/main/java/com/cyberlanting/Assignments/config/SwaggerConfig.java b/Assignment1/backend/Assignments/src/main/java/com/cyberlanting/Assignments/config/SwaggerConfig.java index a02fef4..a1ed45d 100644 --- a/Assignment1/backend/Assignments/src/main/java/com/cyberlanting/Assignments/config/SwaggerConfig.java +++ b/Assignment1/backend/Assignments/src/main/java/com/cyberlanting/Assignments/config/SwaggerConfig.java @@ -8,11 +8,11 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration @Slf4j public class SwaggerConfig implements WebMvcConfigurer { - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { - log.info("静态资源映射"); - registry.addResourceHandler("/swagger-ui/**") - .addResourceLocations("classpath:/META-INF/resources/webjars/springdoc-openapi-ui/") - .resourceChain(false); - } +// @Override +// public void addResourceHandlers(ResourceHandlerRegistry registry) { +// log.info("静态资源映射"); +// registry.addResourceHandler("/swagger-ui/**") +// .addResourceLocations("classpath:/META-INF/resources/webjars/springdoc-openapi-ui/") +// .resourceChain(false); +// } } diff --git a/Assignment2/backend/Assignments/pom.xml b/Assignment2/backend/Assignments/pom.xml new file mode 100644 index 0000000..e51eaf3 --- /dev/null +++ b/Assignment2/backend/Assignments/pom.xml @@ -0,0 +1,93 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.4.3 + + + com.cyberlanting + Assignments + 0.0.1-SNAPSHOT + Assignments + Assignments + + + + + + + + + + + + + + + 17 + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + org.projectlombok + lombok + provided + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.8.5 + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 3.0.4 + + + com.mysql + mysql-connector-j + 9.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/AssignmentsApplication.java b/Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/AssignmentsApplication.java new file mode 100644 index 0000000..c397e0e --- /dev/null +++ b/Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/AssignmentsApplication.java @@ -0,0 +1,13 @@ +package com.cyberlanting.Assignments; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class AssignmentsApplication { + + public static void main(String[] args) { + SpringApplication.run(AssignmentsApplication.class, args); + } + +} diff --git a/Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/config/SwaggerConfig.java b/Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/config/SwaggerConfig.java new file mode 100644 index 0000000..a1ed45d --- /dev/null +++ b/Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/config/SwaggerConfig.java @@ -0,0 +1,18 @@ +package com.cyberlanting.Assignments.config; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +@Slf4j +public class SwaggerConfig implements WebMvcConfigurer { +// @Override +// public void addResourceHandlers(ResourceHandlerRegistry registry) { +// log.info("静态资源映射"); +// registry.addResourceHandler("/swagger-ui/**") +// .addResourceLocations("classpath:/META-INF/resources/webjars/springdoc-openapi-ui/") +// .resourceChain(false); +// } +} diff --git a/Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/controller/UserController.java b/Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/controller/UserController.java new file mode 100644 index 0000000..ae076dd --- /dev/null +++ b/Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/controller/UserController.java @@ -0,0 +1,84 @@ +package com.cyberlanting.Assignments.controller; + +import com.cyberlanting.Assignments.pojo.User; +import com.cyberlanting.Assignments.service.UserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +@Tag(name = "用户模块") +@RestController +@RequestMapping("/users") +public class UserController { + + @Autowired + private UserService userService; + + /** + * 处理"/users/"的GET请求,用来获取用户列表 + * + * @return + */ + @Operation(summary = "获取用户列表") + @GetMapping + public List getUserList() { + List list = userService.getUserList(); + return list; + } + + /** + * 处理"/users/"的POST请求,用来创建User + * + * @param user + * @return + */ + @Operation(summary = "新建用户") + @PostMapping + public String postUser(@RequestBody User user) { + userService.save(user); + return "success"; + } + + /** + * 处理"/users/{id}"的GET请求,用来获取url中id值的User信息 + * + * @param id + * @return + */ + @Operation(summary = "根据id获取用户") + @GetMapping("/{id}") + public User getUser(@PathVariable Long id) { + return userService.getUser(id); + } + + /** + * 处理"/users/{id}"的PUT请求,用来更新User信息 + * + * @param id + * @param user + * @return + */ + @Operation(summary = "根据id修改用户") + @PutMapping("/{id}") + public String putUser(@PathVariable Long id, @RequestBody User user) { + userService.update(id, user); + return "success"; + } + + /** + * 处理"/users/{id}"的DELETE请求,用来删除User + * + * @param id + * @return + */ + @Operation(summary = "删除用户") + @DeleteMapping("/{id}") + public String deleteUser(@PathVariable Long id) { + userService.remove(id); + return "success"; + } + +} diff --git a/Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/mapper/UserMapper.java b/Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/mapper/UserMapper.java new file mode 100644 index 0000000..dec7b9b --- /dev/null +++ b/Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/mapper/UserMapper.java @@ -0,0 +1,24 @@ +package com.cyberlanting.Assignments.mapper; + +import com.cyberlanting.Assignments.pojo.User; +import org.apache.ibatis.annotations.*; + +import java.util.List; + +@Mapper +public interface UserMapper { + + @Select("select * from user") + public List getUserList(); + + @Insert("insert into user(name, age) values(#{name}, #{age})") + public void save(User user); + + @Select("select * from user where id = #{id}") + public User getUser(Long id); + + public void update(Long id, User user); + + @Delete("delete from user where id = #{id}") + public void remove(Long id); +} diff --git a/Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/pojo/User.java b/Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/pojo/User.java new file mode 100644 index 0000000..dc3cd6f --- /dev/null +++ b/Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/pojo/User.java @@ -0,0 +1,12 @@ +package com.cyberlanting.Assignments.pojo; + +import lombok.Data; + +@Data +public class User { + + private Long id; + private String name; + private Integer age; + +} diff --git a/Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/service/UserService.java b/Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/service/UserService.java new file mode 100644 index 0000000..bf10251 --- /dev/null +++ b/Assignment2/backend/Assignments/src/main/java/com/cyberlanting/Assignments/service/UserService.java @@ -0,0 +1,34 @@ +package com.cyberlanting.Assignments.service; + +import com.cyberlanting.Assignments.mapper.UserMapper; +import com.cyberlanting.Assignments.pojo.User; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class UserService { + + @Autowired + private UserMapper userMapper; + public List getUserList() { + return userMapper.getUserList(); + } + + public void save(User user) { + userMapper.save(user); + } + + public User getUser(Long id) { + return userMapper.getUser(id); + } + + public void update(Long id, User user) { + userMapper.update(id, user); + } + + public void remove(Long id) { + userMapper.remove(id); + } +} diff --git a/Assignment2/backend/Assignments/src/main/resources/application.yaml b/Assignment2/backend/Assignments/src/main/resources/application.yaml new file mode 100644 index 0000000..ebd18e0 --- /dev/null +++ b/Assignment2/backend/Assignments/src/main/resources/application.yaml @@ -0,0 +1,16 @@ +spring: + application: + name: Assignments + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/rjgc?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true + username: root + password: 123456 + +mybatis: + #mapper配置文件 + mapper-locations: mapper/*.xml + type-aliases-package: com.cyberlanting.Assignments.pojo + configuration: + #开启驼峰命名 + map-underscore-to-camel-case: true \ No newline at end of file diff --git a/Assignment2/backend/Assignments/src/main/resources/mapper/UserMapper.xml b/Assignment2/backend/Assignments/src/main/resources/mapper/UserMapper.xml new file mode 100644 index 0000000..2bcc8cc --- /dev/null +++ b/Assignment2/backend/Assignments/src/main/resources/mapper/UserMapper.xml @@ -0,0 +1,14 @@ + + + + + + update user + + name = #{user.name}, + age = #{user.age} + + where id = #{id} + + \ No newline at end of file diff --git a/Assignment2/backend/Assignments/src/test/java/com/cyberlanting/Assignments/AssignmentsApplicationTests.java b/Assignment2/backend/Assignments/src/test/java/com/cyberlanting/Assignments/AssignmentsApplicationTests.java new file mode 100644 index 0000000..ad01079 --- /dev/null +++ b/Assignment2/backend/Assignments/src/test/java/com/cyberlanting/Assignments/AssignmentsApplicationTests.java @@ -0,0 +1,88 @@ +package com.cyberlanting.Assignments; + +import com.cyberlanting.Assignments.controller.UserController; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.RequestBuilder; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + + +import java.nio.charset.StandardCharsets; + +import static org.hamcrest.Matchers.equalTo; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@ExtendWith(SpringExtension.class) +@SpringBootTest +class AssignmentsApplicationTests { + + private MockMvc mvc; + + + @BeforeEach + public void setUp() { + mvc = MockMvcBuilders.standaloneSetup(new UserController()) + .defaultResponseCharacterEncoding(StandardCharsets.UTF_8) // 编码格式 + .addDispatcherServletCustomizer(dispatcher -> + dispatcher.setDispatchOptionsRequest(true)) + .build(); + } + + @Test + public void testUserController() throws Exception { + // 测试UserController + RequestBuilder request; + + // 1、get查一下user列表,应该为空 + request = get("/users/"); + mvc.perform(request) + .andExpect(status().isOk()) + .andExpect(content().string(equalTo("[]"))); + + // 2、post提交一个user + request = post("/users/") + .contentType(MediaType.APPLICATION_JSON) + .content("{\"id\":1,\"name\":\"测试大师\",\"age\":20}"); + mvc.perform(request) + .andExpect(content().string(equalTo("success"))); + + // 3、get获取user列表,应该有刚才插入的数据 + request = get("/users/"); + mvc.perform(request) + .andExpect(status().isOk()) + .andExpect(content().string(equalTo("[{\"id\":1,\"name\":\"测试大师\",\"age\":20}]"))); + + // 4、put修改id为1的user + request = put("/users/1") + .contentType(MediaType.APPLICATION_JSON) + .content("{\"name\":\"测试终极大师\",\"age\":30}"); + mvc.perform(request) + .andExpect(content().string(equalTo("success"))); + + // 5、get一个id为1的user + request = get("/users/1"); + mvc.perform(request) + .andExpect(content().string(equalTo("{\"id\":1,\"name\":\"测试终极大师\",\"age\":30}"))); + + // 6、del删除id为1的user + request = delete("/users/1"); + mvc.perform(request) + .andExpect(content().string(equalTo("success"))); + + // 7、get查一下user列表,应该为空 + request = get("/users/"); + mvc.perform(request) + .andExpect(status().isOk()) + .andExpect(content().string(equalTo("[]"))); + + } + + +}