自学内容网 自学内容网

day03 swagger

导入swagger3的步骤:

pom.xml(只需要子模块配置)配置:

<!--springdoc 集成了 swagger3-->
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
            <version>2.5.0</version>
        </dependency>

application.yaml文件配置:

  # swagger3的地址
springdoc:
  swagger-ui:
    path: /swagger-ui.html
  api-docs:
    path: /v3/api-docs

编写类:

package com.zheng.config;

import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * swagger配置类
 * 配置 公司 版本 标题等信息
 */
@Configuration // 配置类的标识
public class SwaggerConfig {
    @Bean
    public OpenAPI openAPI(){
        return new OpenAPI()
                .info(new Info().title("swagger")
                        .contact(new Contact())
                        .description("郑欣怡ii")
                        .version("v1.0.0")
                        .license(new License().name("Apache 2.0").url("http://springdoc.org")))
                        .externalDocs(new ExternalDocumentation()
                        .description("外部文档")
                        .url("https://springshop.wiki.github.org/docs"));
    }
}

实体类

实体类中添加@Schema(参数description)用于标识实体类和属性的名称。

package com.zheng.entity;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

/**
 * 实体层与数据库表 tb_question 进行映射
 * */
@Data // 为属性生成get/set方法
@NoArgsConstructor //生成无参构造函数
@AllArgsConstructor //生成全参构造函数
@ToString // 生成toString()方法
@Schema(description = "Question实体类")
public class Question {
    private Integer id;
    @Schema(description = "专家")
    private String expertName; // 专家
    @Schema(description = "问题人")
    private String questioner; // 问题人
    @Schema(description = "手机号")
    private String phone; // 手机号
    @Schema(description = "作物详细信息")
    private String plantName; // 作物详细信息
    @Schema(description = "问题标题")
    private String title; // 问题标题
    @Schema(description = "问题")
    private String question;// 问题
    @Schema(description = "回答")
    private String answer; // 回答
    @Schema(description = "状态")
    private Integer status; // 状态

}

控制层

需要为控制类加注解@Tag(填入参数name和description)用于在页面中显示控制层的名字和描述。用@Operation参数description显示方法的描述即可。

除此之外,swagger中除了传统的get和post请求之外,为了方便对于数据库的操作,于是又增加了put和delete请求,并规定get请求用于查询,post请求用于添加,put请求用于修改,delete请求用于删除。

package com.zheng.controller;

import com.zheng.entity.Question;
import com.zheng.service.QuestionService;
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.List;

/**
 * Controller整合Swagger
 */
@RestController
@RequestMapping("/question")
@Tag(name="question",description = "tb_question控制层") // swagger标签
public class QuestionController {
    @Autowired
    private QuestionService questionService;

    @Operation(description = "question查询全部") // swagger 标签
    @GetMapping("/findAll")
    public List<Question> findAll() {
        return questionService.findAll();
    }
    /**
     * findById?id=10
     * @param id
     * @return
     */
    @Operation(description = "question根据主键查询") // swagger 标签
    @GetMapping("findById")
    public Question findById(@RequestParam("id") int id) {
        return questionService.findById(id);
    }

    @Operation(description = "根据专家名字查询")
    @GetMapping("/findByExpertName/{expertName}")
    public List<Question> findByExpertName(@PathVariable("expertName") String expertName) {
        return questionService.findByExpertName(expertName);
    }
    @PostMapping("/save")
    @Operation(description = "添加question")
    public int save(Question question) {
        return questionService.save(question);
    }
    @PutMapping("/update") // 修改只能用put请求,删除只能用delete请求
    @Operation(description = "修改question")
    public int update(Question question) {
        return questionService.update(question);
    }

    /**
     * /delete/10
     * @param id
     * @return
     */
    @DeleteMapping("/delete/{qid}")
    @Operation(description = "按照编号删除question")
    public int delete(@PathVariable("qid") int id) {
        return questionService.delete(id);
    }
}

除此之外,其他的类都没有变化。

添加、修改、删除、联表查询

需要在Mapper.xml中配置:

注意sql语句中需要的参数需要用#{参数名}代替,列名和表明最好加``反引号,防止被mysql看作关键字。

联表查询中,针对一对多的情况,需要在“一”的实体类中加入List<>属性来加入“多”的那一类的对象数组,这样就能在查询得到结果的时候能够显示多表的情况,于是在“多”的那一类中的mapper、service层中写入的东西就和其他查询的格式一致,最后的控制层也和其他查询一致,那么只需要再修改xml中的配置,更新resultMap即可。

需要在xml的resultMap中加入collection用于应对一对多的情况(用于增加多个其他类的对象),注意参数是property(属性名)和ofType(对象的类型),里面的内容和普通result一致,都需要id和result来限定列和属性的对应关系。注意如果遇到两个表的某一列的列名一致的情况,需要根据你的sql语句中为两列中的某列的重命名来修改对应的column,这就再次体现了resultMap标识的是sql语句执行后返回的类型。

<?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.zheng.mapper.BankMapper">
    <resultMap id="bankMap" type="Bank">
        <id property="bankId" column="bid" />
        <result property="bankName" column="bank_name"/>
        <result property="" column=""/>
        <result property="bankPhone" column="bank_phone"/>
        <result property="introduce" column="introduce"/>
        <result property="money" column="money"/>
        <result property="rate" column="rate"/>
        <result property="repayment" column="repayment"/>
        <collection property="bankUserList" ofType="BankUser">
            <id property="userName" column="user_name"/>
            <result property="role" column="role"/>
            <result property="bankId" column="bank_id"/>
            <result property="realName" column="real_name"/>
            <result property="password" column="password"/>
            <result property="phone" column="phone"/>
            <result property="createTime" column="create_time"/>
            <result property="updateTime" column="update_time"/>
        </collection>
    </resultMap>
    <select id="findById" parameterType="Integer" resultMap="bankMap">
        SELECT * FROM tb_bank WHERE bank_id = #{bankId}
    </select>
    <select id="findAndBankUser" resultMap="bankMap">
        SELECT bu.*, b.bank_id bid,  b.bank_name, b.introduce, b.bank_phone, b.money, b.rate, b.repayment
        FROM tb_bank AS b INNER JOIN tb_bank_user AS bu ON b.bank_id = bu.bank_id
    </select>
</mapper>

配置nodejs

注意多次配置后需要重启电脑,vscode下载后会出来一长串警告,不会几秒就下载完只出来添加了多少文件。

vscode终端中执行:

npm config set registry https://registry.npmmirror.com
npm install -g @vue/cli

装好后测试,vscode终端中执行:

vue create vue-demo

 


原文地址:https://blog.csdn.net/mrmobi/article/details/140678910

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!