SpringBoot整合Mybatis、Redis和Swagger使用restful風格實現CRUD

SpringBoot整合Mybatis、Redis和Swagger使用restful風格實現CRUD

一、概述

最近在做一個SpringBoot的項目,距離上一次做已經有一段時間了,現在進行一個總結,總體來說比較通用,也可以算作一個Demo,具體的需求就是增刪改查

總體步驟是這樣的:創建springboot項目 --> 導入相應的依賴 --> 進行相關配置 --> 編寫entity、mapper接口和mapper.xml映射文件 --> 測試mapper --> 編寫service和controller -> 通過swagger進行測試

二、項目目錄結構

在這裏插入圖片描述

三、具體的代碼

  1. 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>
    
    
  2. 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
    
    
  3. entity實體類(註解是swagger的註解,等到第8步完成後再加)

    @Data
    @ApiModel("Tag對象模型")
    public class Tag {
         
         
    
        @ApiModelProperty("id")
        private String id;
    
        @ApiModelProperty("目標")
        private String tagTo;
    
        @ApiModelProperty("名字")
        private String name;
    }
    
  4. 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>
    
  5. 對編寫好的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());
        }
        
        // 其他測試的法這裏暫時省略
    }
    
  6. 編寫service接口

    public interface TagService {
         
         
        List<Tag> getAllTag();
    
        Integer addTag(Tag tag);
    
        Integer updateTagById(Tag tag);
    
        Integer deleteTagById(String id);
    }
    
  7. 編寫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);
        }
    }
    
  8. 編寫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();
        }
    
    }
    
  9. 編寫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);
            }
        }
    
    }
    
  10. 啓動項目,瀏覽器打開http://localhost:8080/swagger-ui.html#進入swagger文檔的界面,如下圖所示


    在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章