欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springboot+mybatis plus+code generate+mysql + swagger ui简单demo

程序员文章站 2022-06-06 11:21:01
...

项目基本介绍

该项目使用springboot集成mybatis plus框架,使用mysql数据库,使用maven对代码进行构建,同时引入mybatis plus codegenerate生成entity, service和mapper层的代码。同时集成了swagger ui,可以在没有前端页面的情况下对后端api进行测试。接下面会把详细代码粘贴在这里。
其中mysql使用test数据库,table使用user.

pom.xml

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>springboot_mybatisplus_h2</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>springboot_mybatisplus_h2</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.2.6.RELEASE</version>
  </parent>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <swagger-ui-version>2.9.2</swagger-ui-version>
    <mybatis-plus-version>3.3.1</mybatis-plus-version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger-ui</artifactId>
      <version>${swagger-ui-version}</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>${swagger-ui-version}</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.30</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus -->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus</artifactId>
      <version>${mybatis-plus-version}</version>
    </dependency>

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

    <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-generator -->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-generator</artifactId>
      <version>${mybatis-plus-version}</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.mockito/mockito-core -->
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <version>3.3.3</version>
      <scope>test</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>

  </dependencies>
</project>

入口类

package org.mary;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @Auth yangyongp
 * @Create 2020/5/8 12:09
 */
@SpringBootApplication
@MapperScan("org.mary.mapper")
public class AppStarter {

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

application.yml文件

#database configuration
spring:
  #数据源
  datasource:
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8&&serverTimezone=UTC
    username: root
    password: 1qaz2wsx3edc
    driver-class-name: com.mysql.cj.jdbc.Driver

Swagger ui代码

package org.mary.swagger;

import java.util.Collections;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * @Auth yangyongp
 * @Create 2020/5/8 12:10
 */
@Configuration
@EnableSwagger2
public class SwaggerConfig {

  @Bean
  public Docket api(){
    return new Docket(DocumentationType.SWAGGER_2)
                 .select()
                 .apis(RequestHandlerSelectors.any())
                 .paths(PathSelectors.any())
                 .build()
                 .apiInfo(getApiInfo());
  }

  private ApiInfo getApiInfo(){
    return new ApiInfo("Mary Springboot+MyBatis+mysql demo", "[Base URL: localhost://8080]", "API V1.0",
        "Terms of service", new Contact("", "", ""), "", "", Collections.emptyList());
  }

}

Mybatis Code Generator

package org.mary.tool;

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.FileOutConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @Auth yangyongp
 * @Create 2020/5/8 17:24
 */
public class CodeGenerator {
  /**
   * <p>
   * 读取控制台内容
   * </p>
   */
  public static String scanner(String tip) {
    Scanner scanner = new Scanner(System.in);
    StringBuilder help = new StringBuilder();
    help.append("请输入" + tip + ":");
    System.out.println(help.toString());
    if (scanner.hasNext()) {
      String ipt = scanner.next();
      if (StringUtils.isNotEmpty(ipt)) {
        return ipt;
      }
    }
    throw new MybatisPlusException("请输入正确的" + tip + "!");
  }

  public static void main(String[] args) {
    // 代码生成器
    AutoGenerator mpg = new AutoGenerator();

    // 全局配置
    GlobalConfig gc = new GlobalConfig();
    String projectPath = System.getProperty("user.dir");
    gc.setOutputDir(projectPath + "/src/main/java");
    gc.setAuthor("mary");
    gc.setOpen(false);
    gc.setSwagger2(true); //实体属性 Swagger2 注解
    mpg.setGlobalConfig(gc);

    // 数据源配置
    DataSourceConfig dsc = new DataSourceConfig();
    dsc.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8&&serverTimezone=UTC");
    // dsc.setSchemaName("public");
    dsc.setDriverName("com.mysql.cj.jdbc.Driver");
    dsc.setUsername("root");
    dsc.setPassword("password");
    mpg.setDataSource(dsc);

    // 包配置
    PackageConfig pc = new PackageConfig();
    pc.setModuleName("mary");
    pc.setParent("org");
    mpg.setPackageInfo(pc);

    // 自定义配置
    InjectionConfig cfg = new InjectionConfig() {
      @Override
      public void initMap() {
        // to do nothing
      }
    };

    // 如果模板引擎是 freemarker
    String templatePath = "/templates/mapper.xml.ftl";
    // 如果模板引擎是 velocity
    // String templatePath = "/templates/mapper.xml.vm";

    // 自定义输出配置
    List<FileOutConfig> focList = new ArrayList<>();
    // 自定义配置会被优先输出
    focList.add(new FileOutConfig(templatePath) {
      @Override
      public String outputFile(TableInfo tableInfo) {
        // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
        return projectPath + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
      }
    });
        /*
        cfg.setFileCreate(new IFileCreate() {
            @Override
            public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
                // 判断自定义文件夹是否需要创建
                checkDir("调用默认方法创建的目录,自定义目录用");
                if (fileType == FileType.MAPPER) {
                    // 已经生成 mapper 文件判断存在,不想重新生成返回 false
                    return !new File(filePath).exists();
                }
                // 允许生成模板文件
                return true;
            }
        });
        */
    cfg.setFileOutConfigList(focList);
    mpg.setCfg(cfg);

    // 配置模板
    TemplateConfig templateConfig = new TemplateConfig();

    // 配置自定义输出模板
    //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
    // templateConfig.setEntity("templates/entity2.java");
    // templateConfig.setService();
    // templateConfig.setController();

    templateConfig.setXml(null);
    mpg.setTemplate(templateConfig);

    // 策略配置
    StrategyConfig strategy = new StrategyConfig();
    strategy.setNaming(NamingStrategy.underline_to_camel);
    strategy.setColumnNaming(NamingStrategy.underline_to_camel);
    strategy.setEntityLombokModel(false);
    strategy.setRestControllerStyle(true);

    // 写于父类中的公共字段
    strategy.setSuperEntityColumns("id");
    strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
    strategy.setControllerMappingHyphenStyle(true);
    strategy.setTablePrefix(pc.getModuleName() + "_");
    mpg.setStrategy(strategy);
    mpg.setTemplateEngine(new FreemarkerTemplateEngine());
    mpg.execute();
  }

}

数据库脚本

Create database test;
use test;
CREATE TABLE User(
  id int not null primary key ,
  name varchar(20) null,
  age int null
);
alter table user modify id int auto_increment ; 
 
INSERT  INTO  User VALUES (1,'张三',4);
INSERT  INTO  User VALUES (2,'李四',5);

然后使用Code Generate生成代码

运行代码CodeGenerator然后输入表名User,就会生成如下结构
springboot+mybatis plus+code generate+mysql + swagger ui简单demo

springboot+mybatis plus+code generate+mysql + swagger ui简单demo

Entity User代码修改

增加字段id,同时代码如下

 @TableId(value = "id", type = IdType.AUTO)
 private Integer id;

package org.mary.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

/**
 * <p>
 * 
 * </p>
 *
 * @author mary
 * @since 2020-05-08
 */
@ApiModel(value="User对象", description="")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    private String name;

    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
            "name=" + name +
            ", age=" + age +
        "}";
    }
}

编写Controller代码

package org.mary.controller;


import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import java.util.ArrayList;
import java.util.List;
import org.mary.entity.User;
import org.mary.response.ResultResponse;
import org.mary.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

/**
* <p>
  *  前端控制器
  * </p>
*
* @author mary
* @since 2020-05-08
*/
@RestController
@RequestMapping("/user")
public class UserController {
  @Autowired
  private IUserService userService;

  @RequestMapping(value = "/add", method = RequestMethod.POST)
  @ResponseBody
  public ResultResponse addUser(@RequestBody User user){
    boolean result = userService.save(user);
    ResultResponse response = new ResultResponse();
    response.setResult(result ? ResultResponse.STATUS_SUCCESS: ResultResponse.STATUS_FAILED);
    return response;
  }

  @RequestMapping(value = "/getAll", method = RequestMethod.GET)
  @ResponseBody
  public ResultResponse getList(){
    ResultResponse response = new ResultResponse();
    response.setResult(ResultResponse.STATUS_SUCCESS);
    List<User> userList = userService.list();
    if(userList == null){
      response.setData(new ArrayList<>(0));
    }else{
      response.setData(userList);
    }
    return response;
  }

  @RequestMapping(value = "/update", method = RequestMethod.POST)
  @ResponseBody
  public ResultResponse updateUser(@RequestBody User user){
    boolean result = userService.updateById(user);
    ResultResponse response = new ResultResponse();
    response.setResult(result ? ResultResponse.STATUS_SUCCESS: ResultResponse.STATUS_FAILED);
    return response;
  }

  @RequestMapping(value = "/delete", method = RequestMethod.DELETE)
  @ResponseBody
  public ResultResponse deleteUserById(Integer id){
    if(id == null){
      return new ResultResponse(ResultResponse.STATUS_SUCCESS);
    }
    boolean result = userService.removeById(id);
    ResultResponse response = new ResultResponse();
    response.setResult(result ? ResultResponse.STATUS_SUCCESS: ResultResponse.STATUS_FAILED);
    return response;
  }
}

启动服务

启动服务,并能看到如下日志
springboot+mybatis plus+code generate+mysql + swagger ui简单demo

测试

浏览器输入链接http://localhost:8080/swagger-ui.html,可看到如下界面,然后可对不同的方法进行测试
springboot+mybatis plus+code generate+mysql + swagger ui简单demo

github源码链接

springboot+mybatis plus+mysql+swagger ui

相关标签: SpringBoot系列教程