一、目标

主动生成 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        └── annotations53 directories, 55 files➜  cloud-file-system git:(master) ✗ 


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