• mybatis plus mysql 代码生成器 示例demo


    添加依赖

            <!-- mysql 代码生成器必须引入-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.46</version>
            </dependency>
            <!-- druid 代码生成器必须引入-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.10</version>
            </dependency>
            <!-- mybatis plus 代码生成器必须引入-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.1.0</version>
            </dependency>
            <!-- mybatis plus 代码生成器依赖 代码生成器必须引入-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-generator</artifactId>
                <version>3.1.0</version>
            </dependency>
            <!-- 代码生成器模板 代码生成器必须引入-->
            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>2.3.28</version>
            </dependency>
            <!-- lombok 代码生成器必须引入-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
                <version>1.16.22</version>
            </dependency>

    java代码

    package com.blackcat.blog.util;
    
    import com.baomidou.mybatisplus.annotation.FieldFill;
    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.*;
    import com.baomidou.mybatisplus.generator.config.po.TableFill;
    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.*;
    
    
    /**
     * mybatis plus mysql 代码生成器
     * @author: blackcat
     * @date: 2020/1/6 17:22
     * @Param
    */
    public class MysqlGenerator {
    
        public static void main(String[] args) {
            Map<String, String> param = new HashMap<>();
            param.put("projectPath","D:\project\blackcat-blog\blog-base");// 代码输出项目地址
            param.put("author","blackcat");// 作者
            param.put("url","172.17.0.3:3306/blackcat_blog");// ip/数据库
            param.put("driverName","com.mysql.jdbc.Driver");
            param.put("username","root");// 数据库用户
            param.put("password","111111");// 数据库密码
            param.put("parent","com.blackcat.blog");// 顶层包结构
            param.put("mapper","mapper");// 生成的mapper包名
            param.put("entity","entity");// 生成的entity包名
            param.put("service","service");// 生成的service包名
            param.put("serviceImpl","service.impl");// 生成的serviceImpl包名
            param.put("xml","mappers");// 生成的mapper.xml包名
            param.put("model","");// 生成的mapper.xml包名下的模块名称 空则无 如:mappers.shiro
            param.put("xmlName","Mapper");// 生成的mapper.xml的文件结尾名称如UserMapper.xml
            // 设置模板 freemarker模板:/templates/mapper.xml.ftl  velocity模板:/templates/mapper.xml.vm
            param.put("templatePath","/templates/mapper.xml.ftl");//
            param.put("table","");//数据库表名 一张表时使用
            // 多表时使用,当数组大于0时使用数组
            // 示例:String[] tablse={"sys_menu","sys_role","sys_role_menu","sys_user_role","sys_user_role"};// shiro所需表
    
            // shiro所需表
            String[] tablse={"sys_menu","sys_role","sys_role_menu","sys_user","sys_user_role"};
            generator(param,tablse);
        }
    
        /* *
         * 代码生成
         * @author: blackcat
         * @date: 2020/1/7 13:44
         * @Param [param]
        */
        public static void generator(Map<String, String> param,String[] tablse){
            // 代码生成器
            AutoGenerator mpg = new AutoGenerator();
    
            // 全局配置
            GlobalConfig gc = new GlobalConfig();
            gc.setOutputDir(param.get("projectPath") + "/src/main/java");
            gc.setAuthor(param.get("author"));
            gc.setOpen(false);// 是否打开输出目录
            gc.setServiceName("%sService");// service 命名方式
            gc.setServiceImplName("%sServiceImpl");// service impl 命名方式
            gc.setMapperName("%sMapper");// 自定义文件命名,注意 %s 会自动填充表实体属性!
            gc.setXmlName("%sMapper");// 自定义文件命名,注意 %s 会自动填充表实体属性!
            gc.setFileOverride(true);// 是否覆盖已有文件
            gc.setActiveRecord(true);// 开启 ActiveRecord(活动记录) 模式
            gc.setEnableCache(false);// XML 二级缓存
            gc.setBaseResultMap(true);// XML 开启 BaseResultMap
            gc.setBaseColumnList(false);// XML columList
            mpg.setGlobalConfig(gc);
    
            // 数据源配置
            DataSourceConfig dsc = new DataSourceConfig();
            dsc.setUrl("jdbc:mysql://"+param.get("url")+"?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC");
            dsc.setDriverName(param.get("driverName"));
            dsc.setUsername(param.get("username"));
            dsc.setPassword(param.get("password"));
            mpg.setDataSource(dsc);
    
            // 包配置
            PackageConfig pc = new PackageConfig();
            if(!StringUtils.isEmpty(param.get("model"))){
                pc.setModuleName(param.get("model"));
            }
            pc.setParent(param.get("parent"));
            pc.setMapper(param.get("mapper"));
            pc.setEntity(param.get("entity"));
            pc.setService(param.get("service"));
            pc.setServiceImpl(param.get("serviceImpl"));
            pc.setXml(param.get("xml"));
            mpg.setPackageInfo(pc);
    
            // 自定义需要填充的字段
            List<TableFill> tableFillList = new ArrayList();
            //如 每张表都有一个创建时间、修改时间如下是配置
            TableFill createField = new TableFill("gmt_create", FieldFill.INSERT);
            TableFill modifiedField = new TableFill("gmt_modified", FieldFill.INSERT_UPDATE);
            tableFillList.add(createField);
            tableFillList.add(modifiedField);
    
    
            // 自定义配置
            InjectionConfig cfg = new InjectionConfig() {
                @Override
                public void initMap() {
                    // to do nothing
                }
            };
            // 模板引擎
            String templatePath = param.get("templatePath");
            // 自定义输出配置
            List<FileOutConfig> focList = new ArrayList<>();
            // 自定义配置会被优先输出 这里设置xml的存放路径
            focList.add(new FileOutConfig(templatePath) {
                @Override
                public String outputFile(TableInfo tableInfo) {
                    // 自定义输出文件名
                    StringBuilder customPath = new StringBuilder();
                    customPath.append(param.get("projectPath"));
                    customPath.append("/src/main/resources/");
                    customPath.append(param.get("xml"));
                    customPath.append("/");
                    if(!StringUtils.isEmpty(pc.getModuleName())){
                        customPath.append(pc.getModuleName());
                    }
                    customPath.append("/");
                    customPath.append(tableInfo.getEntityName());
                    customPath.append(param.get("xmlName"));
                    customPath.append(StringPool.DOT_XML);
                   /* return param.get("projectPath") + "/src/main/resources/"+param.get("xml")+"/"
                            + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;*/
                    return customPath.toString();
                }
            });
            cfg.setFileOutConfigList(focList);
            mpg.setCfg(cfg);
    
            // 策略配置
            StrategyConfig strategy = new StrategyConfig();
            //数据库表映射到实体的命名策略,默认:不做任何改变,原样输出
            strategy.setNaming(NamingStrategy.underline_to_camel);
            //数据库表字段映射到实体的命名策略,未指定按照 naming 执行
            strategy.setColumnNaming(NamingStrategy.underline_to_camel);
            strategy.setEntityLombokModel(true);// 是否使用lombok
            if (tablse.length > 0) {
                strategy.setInclude(tablse);// 数据库表 多表
            } else {
                strategy.setInclude(param.get("table"));// 数据库表 一张表
            }
            strategy.setControllerMappingHyphenStyle(true);// 驼峰转连字符
            //strategy.setSuperControllerClass("com.sxt.BaseController");// 公共父类
            //strategy.setSuperEntityColumns("person_id","person_name");// 写于父类中的公共字段
            //strategy.setInclude(("表名,多个英文逗号分割").split(","));//要设置生成哪些表 如果不设置就是生成所有的表
            mpg.setStrategy(strategy);// 数据库表配置
            // 选择 freemarker 引擎需要指定如下加,注意 pom 依赖必须有! 默认 Veloctiy
            mpg.setTemplateEngine(new FreemarkerTemplateEngine());
            mpg.execute();
        }
    }

    示例代码:https://gitee.com/kylin_lawliet/springboot-demos/tree/master/springboot-mybatis-plus-generator

    简单版:MysqlGenerator.class
    参数修改版:MysqlGenerator2.class
    自定义模板:MysqlGenerator3.class

  • 相关阅读:
    Windows各系统关闭更新(winXP/win2003/win7/win8/win2012/win10)
    SSH框架搭建与整合
    Servlet转发和重定向response.sendRedirecte()区别 (转)
    el 表达式用法(转)
    数组和集合(collection)调用syso输出时,结果不一致问题
    Java 接口和抽象类可以被new么?
    Dbutils
    dbutils使用---QueryRunner(query_update)、BeanListBeanHandler、MapListMapHandler、ScalarHandler
    Hadoop参数:fs.defaultFS、 dfs.name.dir 、 dfs.data.dir
    工厂设计模式(三种)详解
  • 原文地址:https://www.cnblogs.com/Kylin-lawliet/p/13371735.html
Copyright © 2020-2023  润新知