SpringBoot整合Mybatis、Redis和Swagger使用restful風格實作CRUD
一、概述
最近在做一個SpringBoot的專案,距離上一次做已經有一段時間了,現在進行一個總結,總體來說比較通用,也可以算作一個Demo,具體的需求就是增刪改查
總體步驟是這樣的:創建springboot專案 --> 匯入相應的依賴 --> 進行相關配置 --> 撰寫entity、mapper介面和mapper.xml映射檔案 --> 測驗mapper --> 撰寫service和controller -> 通過swagger進行測驗
二、專案目錄結構

三、具體的代碼
-
pom檔案
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.vernhe.springboot</groupId> <artifactId>project01</artifactId> <version>0.0.1-SNAPSHOT</version> <name>project01</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- swagger --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project> -
application.yml組態檔
server: port: 8080 spring: datasource: url: jdbc:mysql://127.0.0.1:3306/realProject?useUnicode=true&characterEncoding=utf-8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource redis: host: 127.0.0.1 port: 6379 jedis: pool: max-active: 8 max-wait: -1 max-idle: 500 min-idle: 0 mybatis: mapper-locations: classpath:mapper/*.xml logging: level: com.vernhe.springboot.project01.mapper: debug -
entity物體類(注解是swagger的注解,等到第8步完成后再加)
@Data @ApiModel("Tag物件模型") public class Tag { @ApiModelProperty("id") private String id; @ApiModelProperty("目標") private String tagTo; @ApiModelProperty("名字") private String name; } -
mapper介面(兩種方式)
一、配合注解使用
TagMapper.java
public interface TagMapper { @Select("select * from tag") List<Tag> getAllTag(); }二、配合XXXMapper.xml檔案使用
TagMapper2.java
public interface TagMapper2 { List<Tag> getAllTag(); Integer addTag(Tag tag); Integer updateTagById(Tag tag); Integer deleteTagById(String id); }TagMapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.vernhe.springboot.project01.mapper.TagMapper2"> <insert id="addTag" parameterType="com.vernhe.springboot.project01.entity.Tag"> insert into tag (Id,TagTo,Name) values (#{id},#{tagTo},#{name}); </insert> <update id="updateTagById" parameterType="com.vernhe.springboot.project01.entity.Tag"> update tag set TagTo=#{tagTo},Name=#{name} where Id=#{id}; </update> <delete id="deleteTagById"> delete from tag where Id = #{id}; </delete> <select id="getAllTag" resultType="com.vernhe.springboot.project01.entity.Tag"> select * from tag; </select> </mapper> -
對撰寫好的mapper進行測驗
@SpringBootTest class Project01ApplicationTests { @Autowired TagMapper mapper1; @Autowired TagMapper2 mapper2; @Autowired RedisTemplate<String, String> redisTemplate; @Test void test1() { // 注解方式 System.out.println(mapper1.getAllTag()); } @Test void test2() { // xml映射檔案方式 查詢 System.out.println(mapper2.getAllTag()); } // 其他測驗的法這里暫時省略 } -
撰寫service介面
public interface TagService { List<Tag> getAllTag(); Integer addTag(Tag tag); Integer updateTagById(Tag tag); Integer deleteTagById(String id); } -
撰寫serviceImpl實作類
@Service public class TagServiceImpl implements TagService { @Autowired private TagMapper2 tagMapper; @Override public List<Tag> getAllTag() { return tagMapper.getAllTag(); } @Override public Integer addTag(Tag tag) { return tagMapper.addTag(tag); } @Override public Integer updateTagById(Tag tag) { return tagMapper.updateTagById(tag); } @Override public Integer deleteTagById(String id) { return tagMapper.deleteTagById(id); } } -
撰寫Swagger配置類SwaggerConfig
@Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket creatRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.vernhe.springboot.project01")) //swagger的搜索的包 .paths(PathSelectors.any()) //swagger的路徑匹配規則 .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("SpringBoot-CRUD檔案") .description("使用swagger生成檔案") .version("version 1.0") .build(); } } -
撰寫Controller
@Controller @RequestMapping("/tag") @Api(tags = "Tag管理API") public class TagController { @Autowired TagService tagService; @DeleteMapping("/delete/{id}") @ResponseBody @ApiOperation(value = "洗掉Tag", notes = "洗掉介面") @ApiResponses({ @ApiResponse(code = 200, message = "洗掉成功"), @ApiResponse(code = 400, message = "id不存在或者格式不正確") }) public ResponseEntity<String> deleteTag(@PathVariable("id") String id) { Integer result = tagService.deleteTagById(id); if (result > 0) { return ResponseEntity.ok(id); } else { return new ResponseEntity(id, HttpStatus.BAD_REQUEST); } } @GetMapping("/getall") @ResponseBody @ApiOperation(value = "查詢Tag", notes = "查詢介面") @ApiResponses({ @ApiResponse(code = 200, message = "查詢成功"), @ApiResponse(code = 400, message = "查詢失敗") }) public ResponseEntity<List<Tag>> findAllTag() { List<Tag> tags = tagService.getAllTag(); if (tags == null) { return new ResponseEntity(400,HttpStatus.BAD_REQUEST); } else { return ResponseEntity.ok(tags); } } @PostMapping @ResponseBody @ApiOperation(value = "添加Tag", notes = "添加介面") @ApiResponses({ @ApiResponse(code = 200, message = "添加成功"), @ApiResponse(code = 400, message = "添加失敗"), @ApiResponse(code = 401, message = "權限不足"), }) public ResponseEntity<Tag> addTag(Tag tag) { if (tag == null) { return new ResponseEntity(400,HttpStatus.BAD_REQUEST); } Integer result = tagService.addTag(tag); if (result > 0) { return ResponseEntity.ok(tag); } else { return new ResponseEntity<>(tag, HttpStatus.UNAUTHORIZED); } } @PutMapping @ResponseBody @ApiOperation(value = "更新Tag", notes = "更新介面") @ApiResponses({ @ApiResponse(code = 200, message = "更新成功"), @ApiResponse(code = 400, message = "更新失敗"), @ApiResponse(code = 401, message = "權限不足") }) public ResponseEntity<Tag> updateTag(Tag tag) { if (tag == null) { return new ResponseEntity(400,HttpStatus.BAD_REQUEST); } Integer result = tagService.updateTagById(tag); if (result > 0) { return ResponseEntity.ok(tag); } else { return new ResponseEntity<>(tag, HttpStatus.UNAUTHORIZED); } } } -
啟動專案,瀏覽器打開http://localhost:8080/swagger-ui.html#進入swagger檔案的界面,如下圖所示
?

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/252658.html
標籤:其他
上一篇:分布式鎖的實作原理
