乐趣区

关于前端:MybatisPlus-代码生成器

一、目标

主动生成 entity、mapper、service、mapper xml 文件

└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── zhiyou100
    │   │           ├── controller
    │   │           ├── entity  实体类
    │   │           ├── exception
    │   │           ├── filter
    │   │           │   └── GenericEncodingFilter.java
    │   │           ├── generator
    │   │           │   └── MysqlGenerator.java
    │   │           ├── inter
    │   │           │   └── MyBaseMapper.java
    │   │           ├── interceptor
    │   │           ├── mapper mapper 接口
    │   │           ├── service 服务层接口
    │   │           │   └── impl 服务层实现类
    │   │           └── util


    │   ├── resources
    │   │   ├── applicationContext.xml
    │   │   ├── db
    │   │   │   ├── MySQL.sql
    │   │   │   └── database.properties
    │   │   ├── mappers  发所有的 xml 文件

二、依赖

<!--   mybatis 依赖   开始   -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>3.4.0</version>
</dependency>
<!--   代码生成器     -->
<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.30</version>
</dependency>

三、生成器的配置

package com.zhiyou100.util.mybatis;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
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.Optional;

/**
 * 代码生成器配置
 *
 * @author yang
 * @version 1.0.0
 * @date 2020-10-09 10:29
 */
public class CodeGenerator {
    private String dbUrl;
    private String userName;
    private String password;
    private String dir;
    private String xmlDir;
    private String packageName;

    private CodeGenerator() {}

    /**
     * 生成器外围局部
     *
     * @param serviceNameStartWithI 是否前缀 I
     * @param createController      是否生成 controller
     * @param useLombok             是否应用 lombok
     * @param dbUrl                 数据库连贯
     * @param username              用户名称
     * @param password              明码
     * @param outDir                输入目录
     * @param xmlDir                xml 文件目录
     * @param packageName           包门路
     * @param tableNames            表名称
     */
    private static void codingMysql(boolean serviceNameStartWithI,
                                    boolean createController,
                                    boolean useLombok,
                                    String dbUrl,
                                    String username,
                                    String password,
                                    String outDir,
                                    String xmlDir,
                                    String packageName,
                                    String... tableNames) {GlobalConfig config = new GlobalConfig();
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
//        数据库类型 这里应用 mysql
        dataSourceConfig.setDbType(DbType.MYSQL)
                .setUrl(dbUrl)
                .setUsername(username)
                .setPassword(password)
//                驱动名称  这里应用 mysql
                .setDriverName("com.mysql.cj.jdbc.Driver");

        // 自定义 xml 输入门路
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {// to do nothing}
        };
        List<FileOutConfig> focList = new ArrayList<>();
//        你也能够定制 xml 的模板
        focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义 xml 文件的门路
                return xmlDir + "/mapper/" + tableInfo.getMapperName() + StringPool.DOT_XML;}
        });
        cfg.setFileOutConfigList(focList);


//        策略配置项
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig
                .setCapitalMode(false)
//                是否应用 lombok
                .setEntityLombokModel(useLombok)
//                下划线转驼峰
                .setNaming(NamingStrategy.underline_to_camel)
                // 批改替换成你须要的表名,多个表名传数组
                .setInclude(tableNames);
//        应用 AR 模式
        config.setActiveRecord(true)
//                设置头正文的 author
                .setAuthor("system")
//                我的项目输入门路
                .setOutputDir(outDir)
//                是否笼罩曾经生成的同名文件
                .setFileOverride(true)
//                雪花算法生成 id
                .setIdType(IdType.ASSIGN_ID)
//                是否应用缓存
                .setEnableCache(false)
//                是否生成 xml 中的 根底 resultMap
                .setBaseResultMap(true);
        if (!serviceNameStartWithI) {
//            Service 层的 通用格局后缀
            config.setServiceName("%sService");
        }
//             实体类包名
        PackageConfig packageConfig = new PackageConfig().setParent(packageName).setEntity("entity");
        TemplateConfig templateConfig = new TemplateConfig().setXml(null);
//        这里抉择不生成 controller  实际上 生成的大多不合乎咱们须要  到服务层就行了
        if (!createController) {templateConfig.setController(null);
        }
//        整合起来运行
        new AutoGenerator()
                .setGlobalConfig(config)
                .setTemplateEngine(new FreemarkerTemplateEngine())
                .setDataSource(dataSourceConfig)
                .setStrategy(strategyConfig)
                .setPackageInfo(packageConfig)
                .setCfg(cfg)
                .setTemplate(templateConfig)
                .execute();}

    /**
     * Code.
     *
     * @param tableNames the table names
     */
    public void code(String... tableNames) {codingMysql(true, false, true, this.dbUrl, this.userName, this.password, this.dir, this.xmlDir, this.packageName, tableNames);
    }

    /**
     * The type Config builder.
     */
    public static class ConfigBuilder {

        private String dbUrl;
        private String userName;
        private String password;
        private String dir;
        private String xmlDir;
        private String packageName;


        /**
         * Db url config builder.
         *
         * @param dbUrl the db url
         * @return the config builder
         */
        public ConfigBuilder dbUrl(final String dbUrl) {
            this.dbUrl = dbUrl;
            return this;
        }

        /**
         * User name config builder.
         *
         * @param userName the user name
         * @return the config builder
         */
        public ConfigBuilder userName(final String userName) {
            this.userName = userName;
            return this;
        }

        /**
         * Password config builder.
         *
         * @param password the password
         * @return the config builder
         */
        public ConfigBuilder password(final String password) {
            this.password = password;
            return this;
        }

        /**
         * Dir config builder.
         *
         * @param dir the dir
         * @return the config builder
         */
        public ConfigBuilder dir(final String dir) {
            this.dir = dir;
            return this;
        }

        /**
         * Dir config builder.
         *
         * @param xmlDir the dir
         * @return the config builder
         */
        public ConfigBuilder xmlDir(final String xmlDir) {
            this.xmlDir = xmlDir;
            return this;
        }

        /**
         * Package name config builder.
         *
         * @param packageName the package name
         * @return the config builder
         */
        public ConfigBuilder packageName(final String packageName) {
            this.packageName = packageName;
            return this;
        }

        /**
         * Build code generator.
         *
         * @return the code generator
         */
        public CodeGenerator build() {CodeGenerator generator = new CodeGenerator();

            generator.dbUrl = Optional.of(this.dbUrl).get();
            generator.userName = Optional.of(this.userName).get();
            generator.password = Optional.of(this.password).get();
            generator.dir = Optional.of(this.dir).get();
            generator.xmlDir = Optional.of(this.xmlDir).get();
            generator.packageName = Optional.of(this.packageName).get();
            return generator;
        }
    }
}

四、生成测试

package com.zhiyou100.util.mybatis;

/**
 * 主动生成
 *
 * @author yang
 * @version 1.0.0
 * @date 2020-10-09 10:35
 */
public class AutoCoding {public static void main(String[] args) {
        //          maven 工程 main 包的全门路
        final String mainDir = "/Users/yang/Documents/git/java/project/cloud-file-system/src/main/";

        CodeGenerator.ConfigBuilder builder = new CodeGenerator.ConfigBuilder();

        CodeGenerator codeGenerator = builder
//                数据库连贯
                .dbUrl("jdbc:mysql://localhost:3306/db_26_cloud")
//                账户
                .userName("root")
//                明码
                .password("yanglei1123")
                // 生成类地位
                .dir(mainDir + "java")
                // 生成 xml 地位
                .xmlDir(mainDir + "resources")
                // 包援用门路
                .packageName("com.zhiyou100")
                .build();

        // 依据表生成后盾代码
        codeGenerator.code("tab_file");

    }
}

成果

.
├── README.md
├── cloud-file-system.iml
├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── zhiyou100
│   │   │           ├── controller
│   │   │           ├── entity
│   │   │           │   └── TabFile.java
│   │   │           ├── exception
│   │   │           ├── filter
│   │   │           │   └── GenericEncodingFilter.java
│   │   │           ├── generator
│   │   │           │   └── MysqlGenerator.java
│   │   │           ├── inter
│   │   │           │   └── MyBaseMapper.java
│   │   │           ├── interceptor
│   │   │           ├── mapper
│   │   │           │   └── TabFileMapper.java
│   │   │           ├── service
│   │   │           │   ├── ITabFileService.java
│   │   │           │   └── impl
│   │   │           │       └── TabFileServiceImpl.java
│   │   │           └── util
│   │   │               ├── data
│   │   │               │   └── DateUtil.java
│   │   │               ├── json
│   │   │               │   └── FastJsonTools.java
│   │   │               ├── md5
│   │   │               │   └── Md5Util.java
│   │   │               ├── message
│   │   │               │   ├── SendMail.java
│   │   │               │   └── SendMessage.java
│   │   │               ├── mybatis
│   │   │               │   ├── AutoCoding.java
│   │   │               │   └── CodeGenerator.java
│   │   │               ├── object
│   │   │               │   └── ObjectUtil.java
│   │   │               ├── random
│   │   │               │   └── MyRandomNumber.java
│   │   │               └── reutil
│   │   │                   └── ReUtil.java
│   │   ├── resources
│   │   │   ├── applicationContext.xml
│   │   │   ├── db
│   │   │   │   ├── MySQL.sql
│   │   │   │   └── database.properties
│   │   │   ├── mapper
│   │   │   │   └── TabFileMapper.xml
│   │   │   ├── mappers
│   │   │   └── spring
│   │   │       ├── spring-dao.xml
│   │   │       ├── spring-mvc.xml
│   │   │       └── spring-service.xml
│   │   └── webapp
│   │       ├── WEB-INF
│   │       │   └── web.xml
│   │       └── index.jsp
│   └── test
│       └── java
└── target
    ├── classes
    │   ├── applicationContext.xml
    │   ├── com
    │   │   └── zhiyou100
    │   │       ├── filter
    │   │       │   ├── GenericEncodingFilter.class
    │   │       │   └── MyRequest.class
    │   │       ├── generator
    │   │       │   ├── MysqlGenerator$1.class
    │   │       │   ├── MysqlGenerator$2.class
    │   │       │   └── MysqlGenerator.class
    │   │       ├── inter
    │   │       │   └── MyBaseMapper.class
    │   │       └── util
    │   │           ├── data
    │   │           │   └── DateUtil.class
    │   │           ├── json
    │   │           │   └── FastJsonTools.class
    │   │           ├── md5
    │   │           │   └── Md5Util.class
    │   │           ├── message
    │   │           │   ├── SendMail$1.class
    │   │           │   ├── SendMail.class
    │   │           │   └── SendMessage.class
    │   │           ├── mybatis
    │   │           │   ├── AutoCoding.class
    │   │           │   ├── CodeGenerator$1.class
    │   │           │   ├── CodeGenerator$2.class
    │   │           │   ├── CodeGenerator$ConfigBuilder.class
    │   │           │   └── CodeGenerator.class
    │   │           ├── object
    │   │           │   └── ObjectUtil.class
    │   │           ├── random
    │   │           │   └── MyRandomNumber.class
    │   │           └── reutil
    │   │               └── ReUtil.class
    │   ├── db
    │   │   ├── MySQL.sql
    │   │   └── database.properties
    │   └── spring
    │       ├── spring-dao.xml
    │       ├── spring-mvc.xml
    │       └── spring-service.xml
    └── generated-sources
        └── annotations

53 directories, 55 files
➜  cloud-file-system git:(master) ✗ 

本篇文章由一文多发平台 ArtiPub 主动公布

退出移动版