Springboot整合mybatisPlus+Swagger3.0

java 文章 2022-07-20 10:01 0 全屏看文

SpringBoot+Mybatisplus+Mybatis+Swagger+代码自动生成+log4j

1. SpringBoot+Mybatis+MybatisPlus

1.1 mybatisplus依赖+mybatis依赖

<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-generator -->        <dependency>            <groupId>com.baomidou</groupId>            <artifactId>mybatis-plus-boot-starter</artifactId>            <version>3.5.1</version>        </dependency>

    <dependency>        <groupId>org.mybatis.spring.boot</groupId>        <artifactId>mybatis-spring-boot-starter</artifactId>        <version>2.2.2</version>    </dependency>

1.2 配置信息

1.2.1 yml中datasource配置

spring:  datasource:    driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://localhost:3307/community    username: root    password: 123456

1.2.2 mybatis别名和xml扫描

mybatis:    mapper-locations: classpath:mappers/*xml    type-aliases-package: com.zjw.swager.mybatis.entity

1.3测试准备

1.3.1编写类Building

public class Building {  //TypeId是指定这个属性为id,写上这个才可以通过操作数据库中的id属性,否则类似selectById会失效  //并在后面追加类型,此处写的是自动类型  @TableId(type = IdType.AUTO)  private long id;  private String numbers;  private String uints;  private String remarks;  }

1.3.2编写Mapper接口BuildingMapper

@Mapperpublic interface BuildingMapper extends BaseMapper<Building> {}

//需要继承BaseMapper ,要加上需要操作的泛型

1.3.3 在springboot启动类中添加注解扫描Mapper

@SpringBootApplication//扫描Mapper包下的Mapper接口@MapperScan("com.zjw.mapper")public class Springboottest01Application {    public static void main(String[] args) {        SpringApplication.run(Springboottest01Application.class, args);    }}

1.3.4 编写测试类

@SpringBootTestpublic class demo1 {    @Autowired    private BuildingMapper buildingMapper;    @Test    public void test01(){        Building building = buildingMapper.selectById(1);        System.out.println("building = " + building);    }}

输出结果:
building = Building{id=1, numbers='21栋', uints='1单元', remarks='无'}
测试成功!

1.4 QueryWrapper条件构造器

 // 条件查询        QueryWrapper<Building> queryWrapper = new QueryWrapper<>();        // eq  参数1 给的是表的字段   参2 值//        queryWrapper.eq("sid",4);//        queryWrapper.eq("sage",40);        // queryWrapper 支持链式编程        queryWrapper.eq("sid", 4)   .eq("sage", 40);        // 条件包装类 会自动完成  sql的条件 拼接        // SELECT sid,s_name,sage,ssex,sphone FROM t_student WHERE (sid = ? AND sage = ?)        Building building = buildingMapper.selectOne(queryWrapper);        System.out.println("building = " + building);


复杂的查询条件时使用QueryWrapper条件构造器

1.5 小结 整合步骤

01 添加mybatis-plus的依赖

02 配置数据库连接要素

03 写自己的mapper 继承 mp 的BaseMapper 要给泛型

04 需要在启动类中扫描mapper包

1.6 分页

新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
因此需要添加MybatisPlusConfig配置类进行设置

1.6.1 添加配置类,设置拦截器

@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
// 拦截器添加分页插件
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return mybatisPlusInterceptor;
}
}

1.6.2 测试分页

@Testpublic void test02(){    QueryWrapper<Building> qr = new QueryWrapper<>();    qr.lt("id",100);    IPage<Building> page1 = new Page<>(1,4);    IPage<Building> page = buildingMapper.selectPage(page1, qr);    System.out.println("page = " + page.getRecords());}

输出结果:
page = [Building{id=1, numbers='21栋', uints='1单元', remarks='无'}, Building{id=7, numbers='17栋', uints='2单元', remar。。。。。。
测试成功!

2. pringBoot+Mybatisplus+Mybatis+Swagger

2.1依赖

<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-generator -->        <dependency>            <groupId>com.baomidou</groupId>            <artifactId>mybatis-plus-boot-starter</artifactId>            <version>3.5.1</version>        </dependency>  <dependency>        <groupId>org.mybatis.spring.boot</groupId>        <artifactId>mybatis-spring-boot-starter</artifactId>        <version>2.2.2</version>    </dependency>        <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->    <dependency>        <groupId>io.springfox</groupId>        <artifactId>springfox-swagger-ui</artifactId>        <version>2.9.2</version>    </dependency>    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->    <dependency>        <groupId>io.springfox</groupId>        <artifactId>springfox-swagger2</artifactId>        <version>2.9.2</version>    </dependency>

这里的swagger版本建议用低一些的版本,高版本有兼容性问题!
Failed to start bean ‘documentationPluginsBootstrapper’ 把springboot 版本改成2.6.0 以下版本就可以
若有版本问题:
将依赖改成依赖集合

    <dependency>        <groupId>io.springfox</groupId>        <artifactId>springfox-boot-starter</artifactId>        <version>3.0.0</version>    </dependency>

​ 原先的Swagger的两个依赖不再需要
​ 同时配置中的@EnableSwagger2也不再需要加上,以下为可选项
​ //@EnableSwagger2
​ @EnableOpenApi//可以不写

2.2 配置

swagger需要配置类设置API文档信息

2.2.1编写swagger配置类

//1. 配置类@Configuration//2. 开启swagger支持//@EnableSwagger2@EnableOpenApi//swagger3.0依赖 可以不写public class SwaggerApp {    /**     * 3、自动创建Docket文档摘要对象     */    @Bean    public Docket createRestApi(){        return new Docket(DocumentationType.SWAGGER_2) // 选择swagger的版本,这里若选的3.0则要用OAS_30   // 配置文档信息:swagger文档的标题、版本、描述   .apiInfo(this.apiInfo())   .select()   // 配置要生成swagger文档的扫描的目录包   .apis(RequestHandlerSelectors.basePackage("com.woniu.web"))   // 对指定路径下的任意类生成文档   .paths(PathSelectors.any())   // 创建对象   .build();    }    private ApiInfo apiInfo(){        return new ApiInfoBuilder()   // 指定文档标题 (在swagger页面会显示)   .title("SpringBoot中使用Swagger构建接口文件")   // 指定文档的版本   .version("1.0")   // 文档描述   .description("API描述").build();    }}

2.2.2 通过注解添加API中的内容

2.2.2.1 实体类中
//实体类上的注解@ApiModel(description = "建筑类实体")public class Building {    //TypeId是指定这个属性为id,写上这个才可以通过操作数据库中的id属性,否则类似selectById会失效    //并在后面追加类型,此处写的是自动类型  @TableId(type = IdType.AUTO)  //实体类中属性的注解  @ApiModelProperty("主键id")  private long id;  @ApiModelProperty("楼栋号")  private String numbers;  @ApiModelProperty("单元号")  private String uints;  @ApiModelProperty("备注")  private String remarks;
2.2.2.2 mapper中的设置
@Mapperpublic interface BuildingMapper extends BaseMapper<Building> {}

需要继承BaseMapper ,设置好泛型

2.2.2.3 service中的设置
public interface BuildingService extends IService<Building> {}

需要继承IService

2.2.2.4ServiceImp中的设置
@Servicepublic class BuildingServiceImpl extends ServiceImpl<BuildingMapper, Building> implements BuildingService {}

在实现BuildingService的同时,还要继承ServiceImpl<BuildingMapper ,Building>

2.2.2.5controller 中的设置及注解
@RestController/est风格注解,替代@Controller和@ResponseBody@RequestMapping("/building") 设置访问路径@Api(tags = "楼栋管理")//swagger注解,解释controller的功能public class BuildingController {    @Autowired//自动注入    private BuildingService buildingService;    @GetMapping    public void selectAllBuilding(){    List<Building> list = buildingService.list();    System.out.println("list = " + list);}}

swagger3.0访问路径:http://localhost:8080/swagger-ui/
swagger2访问路径:http://localhost:8080/swagger-ui.html

3. 整合代码自动生成(代码生成器)

3.1 依赖

<dependency>    <groupId>com.baomidou</groupId>    <artifactId>mybatis-plus-generator</artifactId>    <version>3.5.2</version></dependency> <dependency>      <groupId>mysql</groupId>      <artifactId>mysql-connector-java</artifactId></dependency><dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-freemarker</artifactId></dependency>

当前包未传递依赖 MP 包,需要自己引入!

3.2 配置代码生成

public static void main(String[] args) {        FastAutoGenerator.create(   "jdbc:mysql://localhost:3306/spring_db",   "root",   "root")   // 全局配置    .globalConfig(builder -> {       builder.author("yellow Docter") // 设置作者  .enableSwagger() // 开启 swagger 模式  .outputDir("C:\java_lesson\pro\springboot_auto\src\main\java"); // 指定输出目录   })  // 包配置   .packageConfig(builder -> {       builder.parent("com.wn") // 设置父包名  .controller("controller") //controller  .service("service")       //service  .serviceImpl("service.impl")  .mapper("mapper")  .xml("mapper")  .entity("entity");   })   //表的配置    .strategyConfig(builder -> {       builder.addInclude("user"); // 设置需要生成的表名   })   .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板   .execute();    System.out.println("成功了...");    }

3.3运行

配置好生成代码类后直接运行类中主方法
即可生成
注意设置包名及路径

-EOF-