Spring boot 整合swagger和mybatis-plus

发布时间 2023-08-23 09:12:18作者: 知行合二为一

1. 回顾

springboot整合数据源:---默认数据源 和  Druid数据源
springboot整合mybatis
springboot整合定时器。

2.正文

1. springboot整合swagger接口文档
2. springboot整合mp

3.springboot整合swagger接口文档

开发流程:

1692425520309

1692426135998

接口文档的作用: 就是为了方便前后端的交互。

需要在线接口文档: --swagger2

(1)如何使用swagger2


        <!--引入swagger2依赖-->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.9.1.RELEASE</version>
        </dependency>
        <!--图形化依赖-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.9.6</version>
        </dependency>

(2)创建一个swagger配置类

package com.zjw.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.VendorExtension;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

import java.util.ArrayList;


@Configuration
public class SwaggerConfig {

    @Bean //把该方法返回的对象交于spring容器管理---Docket
    public Docket docket(){
//        Docket docket=new Docket(DocumentationType.SWAGGER_2);
//        docket.apiInfo(getInfo());//设置文档的信息
//        //指定未哪些包生成接口文档。
//        docket = docket.select().apis(RequestHandlerSelectors.basePackage("com.zjw.controller")).build();
//
//        return docket;
        Docket docket=new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(getInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.zjw.controller"))
                .build();
        return docket;
    }

    private ApiInfo getInfo(){
        Contact DEFAULT_CONTACT = new Contact("aaa", "http://www.zjw.com", "zjw@qq.com");
        ApiInfo info = new ApiInfo("aaa", "员工管理系统API", "v1.0", "http://www.jd.com",
                DEFAULT_CONTACT, "Apache 2.0", "http://www.baidu.com", new ArrayList<VendorExtension>());
        return info;

    }
}

(3)开启swagger2的注解驱动

1692427213320

(4)测试:

http://localhost:8888/doc.html

1692428259212

从文档中我们发现接口文档的名称--是英文

需要使用swagger的注解

@Api:接口类的说明 加在controller类上

@ApiOperation: 接口方法的说明。 加在controller方法上

@ApiImplicitParams: 接口方法的所有参数的说明.

​ @ApiImplicitParam:单个参数的说明

​ --name: 参数名

​ --value: 参数的说明

​ --require: 是否为必须的

​ --dataType: 参数类型说明 int string

@ApiModel: 实体类的说明

@ApiModelProperty: 单个参数的说明

把昨天写的crud----添加的方法使用swagger加以说明

4. springboot整合mp

mp: mybatis-plus

https://baomidou.com/pages/24112f/

(1)依赖

 <dependencies>
        <!--mp的依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.1</version>
        </dependency>
        <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>
    </dependencies>

(2)application.properties

#修改端口号
server.port=80
#数据源
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.username=root
spring.datasource.druid.password=root
spring.datasource.druid.url=jdbc:mysql://localhost:3306/zjw?serverTimezone=Asia/Shanghai
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=10

#mybatis映射文件的路径
mybatis.mapper-locations=classpath:/mapper/*.xml

#sql日志--控制台
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

(3)实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Integer id;
    private String name;
    private Integer age;
    private String email;
}

(4)dao

public interface UserDao extends BaseMapper<User> {
}

(5) 扫描dao接口

@SpringBootApplication
@MapperScan(basePackages = "com.zjw.dao")
public class Qy168Springboot05Application {

    public static void main(String[] args) {
        SpringApplication.run(Qy168Springboot05Application.class, args);
    }

}

(6)测试

package com.zjw;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zjw.dao.UserDao;
import com.zjw.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.sql.Wrapper;
import java.util.ArrayList;
import java.util.List;

@SpringBootTest
class Qy168Springboot05ApplicationTests {

    @Autowired
    private UserDao userDao;
    //测试根据id查询用户信息.
    /*
    表名和实体类名不一致: 使用@TableName(value="表名")
    列名和实体类名不一致: 使用@TableField(value="列名")
    主键和实体的不一致| 不叫id  使用@TableId(value="主键列")
    如果实体类中出现某个属性 不属于表里面的字段。 @TableField(exist = false) //数据库不存在该列
     */
    @Test
    void testSelectById() {
        User user = userDao.selectById(1); //默认主键名叫id--需要在该属性上标记它为主键。
        System.out.println(user);
    }

    /*
       mp:(1)添加时完成主键生成策略.(2)把生成的主键返回给实体类。
       思考: 能否修改主键的生成策略。默认生成的主键按照雪花算法。--生成的id全国唯一。Long类型
        @TableId(value ="uid",type = IdType.AUTO ) //如果你使用AUTO类,表示它就会采用mysql表的递增策略
        默认为ASSIGN_ID
     */
    @Test
    void testInsert(){
        User user=new User(null,"zjw~22",152,"120@qq.com");
        System.out.println("添加前:"+user);
        userDao.insert(user);
        System.out.println("添加后:"+user);
    }

    @Test
    public void testUpdate(){
         User user=new User(1L,"zjw",1,"130@qq.com");
//         userDao.updateById(user); //根据主键修改.
        //mp封装了一个条件类 每个条件对应一个方法:Wrapper---UpdateWrapper[增删改的条件]  QueryWrapper[查询的条件]
        UpdateWrapper<User> wrapper=new UpdateWrapper<>();
//        wrapper.eq("name","zjw");  //where name='zjw'
//        wrapper.ge("age",18); // where age>=18
//        wrapper.between("age",15,25);// where age between 15 and 25;
//        wrapper.like("name","zjw");//where name like '%zjw%'
//        wrapper.ne("name","zjw"); //where name !='zjw'
//        wrapper.lt("age",25); //where age<25;
//        wrapper.notLike("name","z");
//        wrapper.or();//or
//        wrapper.ne("name","zjw");  //where name like '%z%' and name<>'zjw'
        userDao.update(user,wrapper);
    }

    //测试删除
    @Test
    public void testDelete(){
        //根据主键删除
        //int row = userDao.deleteById(1);
        //deleteBatchIds: 批量删除
//        List<Long> ids=new ArrayList<>();
//        ids.add(1L);
//        ids.add(3L);
//        ids.add(9L);
//        userDao.deleteBatchIds(ids); //where id in(1,3,9)
          //根据其他条件删除--
        UpdateWrapper<User> wrapper=new UpdateWrapper<>();
        wrapper.likeRight("name","刘");
        userDao.delete(wrapper);
    }


    //根据条件多条记录
    @Test
    public void testSelectAll(){
        QueryWrapper<User> wrapper=new QueryWrapper<>();
        wrapper.like("name","王");
        List<User> users = userDao.selectList(wrapper);
        System.out.println(users);
    }

    //分页查询. 如果想让分页有效 必须配置分页拦截器。
    /*

     */
    @Test
    public void testSelectByPage(){
        IPage<User> iPage=new Page(1,2);
        QueryWrapper<User> wrapper=new QueryWrapper<>();
        wrapper.orderByDesc("uid");
        IPage<User> page = userDao.selectPage(iPage, wrapper);//Page:分页对象  Wrapper:条件对象
        System.out.println("总条数:"+page.getTotal());
        System.out.println("总页数:"+page.getPages());
        System.out.println("当前页的记录:"+page.getRecords());
    }


}