commit a064d965b795c919dc4f8634a4824538e26c157e Author: 子悦 Date: Sat Mar 8 20:31:58 2025 +0800 后端 diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..df306a6 Binary files /dev/null and b/.DS_Store differ diff --git a/demo2/.DS_Store b/demo2/.DS_Store new file mode 100644 index 0000000..7946c49 Binary files /dev/null and b/demo2/.DS_Store differ diff --git a/demo2/.gitignore b/demo2/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/demo2/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/demo2/pom.xml b/demo2/pom.xml new file mode 100644 index 0000000..a8ed7f0 --- /dev/null +++ b/demo2/pom.xml @@ -0,0 +1,102 @@ + + + 4.0.0 + + + org.springframework.boot + spring-boot-starter-parent + 2.1.3.RELEASE + + + + com.didispace + chapter2-2 + 0.0.1-SNAPSHOT + chapter2-2 + Demo project for Spring Boot + + + 1.8 + + + + + org.springframework.boot + spring-boot-starter-web + + + + com.spring4all + swagger-spring-boot-starter + 1.9.0.RELEASE + + + + org.projectlombok + lombok + 1.18.30 + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.2.2 + + + + org.mybatis + mybatis + 3.5.9 + + + + mysql + mysql-connector-java + 5.1.49 + + + + junit + junit + 4.12 + test + + + + + ch.qos.logback + logback-classic + 1.2.11 + + + + + org.mybatis + mybatis + 3.5.5 + + + + mysql + mysql-connector-java + 8.0.21 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + \ No newline at end of file diff --git a/demo2/src/.DS_Store b/demo2/src/.DS_Store new file mode 100644 index 0000000..4b6a209 Binary files /dev/null and b/demo2/src/.DS_Store differ diff --git a/demo2/src/main/.DS_Store b/demo2/src/main/.DS_Store new file mode 100644 index 0000000..7a2baee Binary files /dev/null and b/demo2/src/main/.DS_Store differ diff --git a/demo2/src/main/java/com/didispace/chapter22/Chapter22Application.java b/demo2/src/main/java/com/didispace/chapter22/Chapter22Application.java new file mode 100644 index 0000000..71c9022 --- /dev/null +++ b/demo2/src/main/java/com/didispace/chapter22/Chapter22Application.java @@ -0,0 +1,15 @@ +package com.didispace.chapter22; + +import com.spring4all.swagger.EnableSwagger2Doc; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@EnableSwagger2Doc +@SpringBootApplication +public class Chapter22Application { + + public static void main(String[] args) { + SpringApplication.run(Chapter22Application.class, args); + } + +} \ No newline at end of file diff --git a/demo2/src/main/java/com/didispace/chapter22/User.java b/demo2/src/main/java/com/didispace/chapter22/User.java new file mode 100644 index 0000000..827a1be --- /dev/null +++ b/demo2/src/main/java/com/didispace/chapter22/User.java @@ -0,0 +1,18 @@ +package com.didispace.chapter22; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(description="用户实体") +public class User { + + @ApiModelProperty("用户编号") + private int id; + @ApiModelProperty("用户姓名") + private String name; + @ApiModelProperty("用户年龄") + private Integer age; + +} \ No newline at end of file diff --git a/demo2/src/main/java/com/didispace/chapter22/UserController.java b/demo2/src/main/java/com/didispace/chapter22/UserController.java new file mode 100644 index 0000000..ea6977f --- /dev/null +++ b/demo2/src/main/java/com/didispace/chapter22/UserController.java @@ -0,0 +1,57 @@ +package com.didispace.chapter22; + + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +@Api(tags = "用户管理") +@RestController +@RequestMapping(value = "/users") // 通过这里配置使下面的映射都在/users下 +public class UserController { + + // 创建线程安全的Map,模拟users信息的存储 + static Map users = Collections.synchronizedMap(new HashMap<>()); + + @GetMapping("/") + @ApiOperation(value = "获取用户列表") + public List getUserList() { + List r = new ArrayList<>(users.values()); + return r; + } + + @PostMapping("/") + @ApiOperation(value = "创建用户", notes = "根据User对象创建用户") + public String postUser(@RequestBody User user) { + users.put(user.getId(), user); + return "success"; + } + + @GetMapping("/{id}") + @ApiOperation(value = "获取用户详细信息", notes = "根据url的id来获取用户详细信息") + public User getUser(@PathVariable int id) { + return users.get(id); + } + + @PutMapping("/{id}") + @ApiImplicitParam(paramType = "path", dataType = "Long", name = "id", value = "用户编号", required = true, example = "1") + @ApiOperation(value = "更新用户详细信息", notes = "根据url的id来指定更新对象,并根据传过来的user信息来更新用户详细信息") + public String putUser(@PathVariable int id, @RequestBody User user) { + User u = users.get(id); + u.setName(user.getName()); + u.setAge(user.getAge()); + users.put(id, u); + return "success"; + } + + @DeleteMapping("/{id}") + @ApiOperation(value = "删除用户", notes = "根据url的id来指定删除对象") + public String deleteUser(@PathVariable int id) { + users.remove(id); + return "success"; + } + +} \ No newline at end of file diff --git a/demo2/src/main/java/com/didispace/chapter22/UserMapper.java b/demo2/src/main/java/com/didispace/chapter22/UserMapper.java new file mode 100644 index 0000000..9322e9f --- /dev/null +++ b/demo2/src/main/java/com/didispace/chapter22/UserMapper.java @@ -0,0 +1,24 @@ +package com.didispace.chapter22; +import java.util.List; + +import org.apache.ibatis.annotations.*; + + +@Mapper//运行时会自动生成该接口的实现类对象,并交给IOC容器管理 +public interface UserMapper { + //根据ID删除数据 + @Delete("delete from Users01 where id=#{id}") + public void delete(int id); + + @Insert("insert into Users01(id, name, age) values(#{id},#{name},#{age})") + public void insert(User user); + + @Update("update Users01 set name=#{name},age=#{age} where id=#{id}") + public void update(User user); + + @Select("select * from Users01 where id=#{id}") + public User select(int id); + //查询全部用户信息 + /*@ Select("select * from Users01") + public List list();*/ +} diff --git a/demo2/src/main/resources/application.properties b/demo2/src/main/resources/application.properties new file mode 100644 index 0000000..6740300 --- /dev/null +++ b/demo2/src/main/resources/application.properties @@ -0,0 +1,21 @@ +# 应用服务 WEB 访问端口 +server.port=8080 +swagger.title=spring-boot-starter-swagger +swagger.description=Starter for swagger 2.x +swagger.version=1.9.0.RELEASE +swagger.license=Apache License, Version 2.0 +swagger.licenseUrl=https://www.apache.org/licenses/LICENSE-2.0.html +swagger.termsOfServiceUrl=https://github.com/dyc87112/spring-boot-starter-swagger +swagger.contact.name=didi +swagger.contact.url=http://blog.didispace.com +swagger.contact.email=dyc87112@qq.com +swagger.base-package=com.didispace +swagger.base-path=/** + +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.datasource.url=jdbc:mysql://localhost:3306/users?serverTimezone=GMT%2B8 +spring.datasource.username=root +spring.datasource.password=today218737202 + +#??mybatis???????????? +mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl diff --git a/demo2/src/test/.DS_Store b/demo2/src/test/.DS_Store new file mode 100644 index 0000000..d905968 Binary files /dev/null and b/demo2/src/test/.DS_Store differ diff --git a/demo2/src/test/java/.DS_Store b/demo2/src/test/java/.DS_Store new file mode 100644 index 0000000..ec104e0 Binary files /dev/null and b/demo2/src/test/java/.DS_Store differ diff --git a/demo2/src/test/java/com/.DS_Store b/demo2/src/test/java/com/.DS_Store new file mode 100644 index 0000000..e99041f Binary files /dev/null and b/demo2/src/test/java/com/.DS_Store differ diff --git a/demo2/src/test/java/com/didispace/.DS_Store b/demo2/src/test/java/com/didispace/.DS_Store new file mode 100644 index 0000000..3a782dc Binary files /dev/null and b/demo2/src/test/java/com/didispace/.DS_Store differ diff --git a/demo2/src/test/java/com/didispace/chapter22/Chapter22ApplicationTests.java b/demo2/src/test/java/com/didispace/chapter22/Chapter22ApplicationTests.java new file mode 100644 index 0000000..922bfb4 --- /dev/null +++ b/demo2/src/test/java/com/didispace/chapter22/Chapter22ApplicationTests.java @@ -0,0 +1,121 @@ +package com.didispace.chapter22; +import java.util.*; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.RequestBuilder; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import java.util.List; + +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; + + +@RunWith(SpringRunner.class) +@SpringBootTest +public class Chapter22ApplicationTests { + @Autowired + private UserMapper userMapper; + /*@Test + public void testListUser(){ + List userList = userMapper.list(); + userList.stream().forEach(user->{ + System.out.println(user); + }); + }*/ + @Test + public void testDelete(){ + userMapper.delete(1); + } + @Test + public void testInsert(){ + User user = new User(); + user.setId(7); + user.setAge(18); + user.setName("Jessie"); + + userMapper.insert(user); + } + @Test + public void testUpdate(){ + User user = new User(); + user.setId(7); + user.setAge(20); + user.setName("Jessie"); + + userMapper.update(user); + } + @Test + public void testSelect(){ + User user=userMapper.select(3); + System.out.println(user); + } + + + private MockMvc mvc; + + @Before + public void setUp() { + mvc = MockMvcBuilders.standaloneSetup(new UserController()).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("[]"))); + + } + +}