java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > springboot集成mybaits-generator

springboot集成mybaits-generator自动生成代码的流程分析

作者:冉成未来

这篇文章主要介绍了springboot集成mybaits-generator自动生成代码的流程分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,感兴趣的朋友一起看看吧

概述

创建springboot项目,在这里使用的是springboot 2.6.13版本,引入的项目依赖包如pom文件所写,jdk使用1.8,集成swagger。

创建springboot项目

使用start.aliyun.com创建springboot项目

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>
    <groupId>com.rc</groupId>
    <artifactId>generator-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>generator-demo</name>
    <description>generator-demo</description>
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
    </properties>
    <dependencies>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--springboot-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--mysql连接驱动-->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
        </dependency>
        <!--lombok类-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>
        <!--druid数据源-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.20</version>
        </dependency>
        <!--swagger-->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.9.1.RELEASE</version>
        </dependency>
        <!--热启动-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <!--mybatis-plus代码生成-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.0</version>
        </dependency>
        <!--freemarker模板引擎-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>
        <!--lang3工具类-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <!--测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.rc.GeneratorDemoApplication</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

使用mybatis-plus-generator时需要注意版本号,本项目使用的是3.4.0版本

aplication.yml

server:
  port: 8096
  servlet:
    context-path: /
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/you_table?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT
    username: root
    password: root

代码生成类

public class CodeGenerator {
    public static String tables = "user";  //需要自动生成代码的表,以英文逗号隔开
    public static void main(String[] args) {
        //代码生成器对象
        AutoGenerator autoGenerator = new AutoGenerator();
        //全局配置
        GlobalConfig gc = new GlobalConfig();
        //获取项目目录
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath+"/src/main/java");
        gc.setAuthor("rc");
        gc.setOpen(false);
        gc.setServiceName("%sService");
        autoGenerator.setGlobalConfig(gc);
        //数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://192.168.1.229:3306/rcdb?useUnicode=true&useSSL=false&characterEncoding=utf-8&serverTimezone=UTC");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("wangcheng");
        autoGenerator.setDataSource(dsc);
        //包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName(null);
        pc.setParent("com.rc");
        autoGenerator.setPackageInfo(pc);
        //自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
            }
        };
        //模板引擎是freemarker
        String templatePath = "/template/mapper.xml.ftl";
        //模版引擎是velocity
        //String templatePath = "/template/mapper.xml.vm";
        List<FileOutConfig> focList = new ArrayList<>();
        //需要生成*mapper.xml时需要配置
        focList.add(new FileOutConfig(templatePath) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return projectPath+"/src/main/resources/mapper/" + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);
        autoGenerator.setCfg(cfg);
        //配置模板
        TemplateConfig templateConfig = new TemplateConfig();
        templateConfig.setController("template/Controller.java");
        templateConfig.setXml(null);
        autoGenerator.setTemplate(templateConfig);
        //策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
        strategyConfig.setEntityLombokModel(true);
        strategyConfig.setRestControllerStyle(true);
        strategyConfig.setInclude(tables.split(","));
        strategyConfig.setControllerMappingHyphenStyle(true);
        strategyConfig.setTablePrefix("m_");
        autoGenerator.setStrategy(strategyConfig);
        autoGenerator.setTemplateEngine(new FreemarkerTemplateEngine());
        autoGenerator.execute();
    }
}

mybatis-plus提供的变量

{
    "date": "2018-10-30",
    "superServiceImplClassPackage": "com.baomidou.mybatisplus.extension.service.impl.ServiceImpl",
    "baseResultMap": true,
    "superMapperClass": "BaseMapper",
    "activeRecord": true,
    "superServiceClass": "IService",
    "superServiceImplClass": "ServiceImpl",
    "table": {
        "comment": "表备注",
        "commonFields": [],
        "controllerName": "AirStatLiveDataController",
        "convert": false,
        "entityName": "AirStatLiveData",
        "entityPath": "airStatLiveData",
        "fieldNames": "table_id, citycode, cityname, createtime, time, info, devid, stationname, aqi, pm25, pm10, co, so2, no2, o3, prkey",
        "fields": [{
            "capitalName": "TableId",
            "columnType": "LONG",
            "comment": "表单id",
            "convert": false,
            "keyFlag": true,
            "keyIdentityFlag": true,
            "name": "table_id",
            "propertyName": "tableId",
            "propertyType": "Long",
            "type": "bigint(20)"
        }...],
        "importPackages": ["com.baomidou.mybatisplus.annotation.IdType", "com.baomidou.mybatisplus.extension.activerecord.Model", "com.baomidou.mybatisplus.annotation.TableId", "java.io.Serializable"],
        "mapperName": "xxxMapper",
        "name": "tableName",
        "serviceImplName": "xxxServiceImpl",
        "serviceName": "xxxService",
        "xmlName": "xxxMapper"
    },
    "package": {
        "Entity": "com.cy.entity",
        "Mapper": "com.cy.mapper",
        "Xml": "com.cy.mapper",
        "ServiceImpl": "com.cy.service.impl",
        "Service": "com.cy.service",
        "Controller": "com.cy.controller"
    },
    "author": "author",
    "swagger2": false,
    "baseColumnList": false,
    "kotlin": false,
    "entityLombokModel": false,
    "superMapperClassPackage": "com.baomidou.mybatisplus.core.mapper.BaseMapper",
    "restControllerStyle": false,
    "entityBuilderModel": true,
    "superServiceClassPackage": "com.baomidou.mybatisplus.extension.service.IService",
    "entityBooleanColumnRemoveIsPrefix": false,
    "entityColumnConstant": false,
    "config": {
        "globalConfig": {
            "activeRecord": true,
            "author": "author",
            "baseColumnList": false,
            "baseResultMap": true,
            "controllerName": "%sController",
            "dateType": "TIME_PACK",
            "enableCache": false,
            "fileOverride": false,
            "kotlin": false,
            "mapperName": "%sMapper",
            "open": false,
            "outputDir": "",
            "serviceImplName": "%sServiceImpl",
            "serviceName": "%sService",
            "swagger2": false,
            "xmlName": "%sMapper"
        },
        "packageInfo": {
            "$ref": "$.package"
        },
        "pathInfo": {
            "entity_path": "",
            "controller_path": "",
            "xml_path": "",
            "service_path": "",
            "mapper_path": "",
            "service_impl_path": ""
        },
        "strategyConfig": {
            "capitalMode": false,
            "columnNaming": "underline_to_camel",
            "controllerMappingHyphenStyle": false,
            "entityBooleanColumnRemoveIsPrefix": false,
            "entityBuilderModel": true,
            "entityColumnConstant": false,
            "entityLombokModel": false,
            "entityTableFieldAnnotationEnable": false,
            "include": ["air_stat_live_data"],
            "naming": "underline_to_camel",
            "restControllerStyle": false,
            "skipView": false,
            "superMapperClass": "com.baomidou.mybatisplus.core.mapper.BaseMapper",
            "superServiceClass": "com.baomidou.mybatisplus.extension.service.IService",
            "superServiceImplClass": "com.baomidou.mybatisplus.extension.service.impl.ServiceImpl"
        },
        "superMapperClass": "com.baomidou.mybatisplus.core.mapper.BaseMapper",
        "superServiceClass": "com.baomidou.mybatisplus.extension.service.IService",
        "superServiceImplClass": "com.baomidou.mybatisplus.extension.service.impl.ServiceImpl",
        "tableInfoList": [{
            "$ref": "$.table"
        }],
        "template": {
            "controller": "/templates/controller.java",
            "mapper": "/templates/mapper.java",
            "service": "/templates/service.java",
            "serviceImpl": "/templates/serviceImpl.java",
            "xml": "/templates/mapper.xml"
        }
    },
    "enableCache": false,
    "entity": "AirStatLiveData"
}

模板中的动态数据可以根据mybatis-plus提供的变量进行填充

controller模板

Controller.java.ftl

package ${package.Controller};
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import ${package.Entity}.${entity};
import ${package.Service}.${table.serviceName};
import com.rc.entity.web.PageParam;
import com.rc.entity.web.Result;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@Api(tags="$(table.comment)")
@RequestMapping("/${entity?uncap_first}")
public class ${entity}Controller {
    @Autowired
    private ${table.serviceName} ${entity?uncap_first}Service;
    /**
    * 根据id获取对象
    * @param id
    * @return
    */
    @GetMapping("/{id}")
    public ${entity} getById(@PathVariable Long id) {
        return ${entity?uncap_first}Service.getById(id);
    }
    /**
    * 分页查询
    * @param pageParam
    * @return
    */
    @PostMapping("/queryByPage")
    public Result queryUserByPage(PageParam pageParam){
        QueryWrapper<${entity}> ${entity?uncap_first}QueryWrapper = new QueryWrapper<>();
        Map<String, String> queryMap = pageParam.getQueryMap();
        if (StringUtils.isNotBlank(queryMap.get("id"))){
            ${entity?uncap_first}QueryWrapper.like("id",queryMap.get("id"));
        }
        Page<${entity}> ${entity?uncap_first}Page = ${entity?uncap_first}Service.page(new Page<>(pageParam.getCurrentPage(), pageParam.getPageSize()), ${entity?uncap_first}QueryWrapper);
        return Result.SUCCESS(${entity?uncap_first}Page);
    }
}

mapper模板

mapper.xml.ftl

<?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="${package.Mapper}.${table.mapperName}">
</mapper>

总结

通过继承mybaits-generotar可以快速根据表生成后端代码,简化开发,开发过程中只需要专注于开发业务逻辑的梳理。
项目地址:https://gitee.com/wangcheng626/generator-demo.git

到此这篇关于springboot集成mybaits-generator自动生成代码的文章就介绍到这了,更多相关springboot集成mybaits-generator内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文