首页 > 其他分享 >MP 代码生成器工具类

MP 代码生成器工具类

时间:2023-03-07 17:59:15浏览次数:32  
标签:代码生成 String mapper -- 生成 MP new 工具 true

Mybatis-Plus 代码生成器工具类

对 MP 的代码生成器写一个简单的工具类:

public class Main {
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入" + tip + ":");
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (!StringUtils.isEmpty(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "!");
    }

    public static void main(String[] args) {
//        String parentPath = System.getProperty("user.dir"); // 如果工程就一个模块只设置 parentName
        String parentPath = "E:\\xxx\\xxx\\"; // 如果工程就一个模块只设置 parentName
        String submoduleName = "test"; // 如果有子模块还需设置 submoduleName 一般针对一个模块的表
        String generatingPath = "com.cnda.server"; // 逆向生成的代码的根路径


        /*
         *  AutoGenerator 代码生成器
         */
        AutoGenerator ag = new AutoGenerator();

        System.out.println(parentPath);

        //1. 全局配置
        GlobalConfig config = new GlobalConfig();

        /*
         * GlobalConfig主要配置的属性有:
         * -- 是否支持AR模式
         * -- 生成代码结构的根路径
         * -- 文件是否覆盖
         * -- 主键策略
         * -- 生成基本的resultMap
         * -- 生成基本的SQL片段,也就是xml文件中的sql标签,包含了表中的字段名
         */


        config  // 设置作者名
                .setAuthor("cnda")
                // 是否支持AR模式:AR 模式相对于原始的 MP 模式来说,可以通过 pojo 实体类(继承了 Model 类)
                // 直接操作数据库。但是底层任然是使用 mapper 进行操作。
                // .setActiveRecord(true)

                // 生成路径:项目地址 + 模块地址,一般情况下
                .setOutputDir(parentPath + "/"+ submoduleName+"/src/main/java")
                // 文件覆盖
                //.setFileOverride(false)
                // 打开输出目录
                .setOpen(false)
                // 主键策略
                .setIdType(IdType.AUTO)
                // 设置日期格式          
                //.setDateType(DateType.ONLY_DATE)
                // 设置生成的service接口的名字的首字母是否为I,默认Service是以I开头的
                .setServiceName("%sService")
                //生成基本的resultMap
                .setBaseResultMap(true)
                // 实体属性 swagger2 注解
                //.setSwagger2(true)
                //生成基本的SQL片段
                .setBaseColumnList(true);

        //2. 数据源配置
        /**
         * DataSourceConfig的主要属性配置
         * 此处为MP连接数据库读取数据库中表的属性和字段名,帮我们自动生成项目结构和数据库中表对应的实体类
         * -- 数据库类型
         */
        DataSourceConfig dsConfig = new DataSourceConfig();
        // 设置数据库类型
        dsConfig//.setDbType(DbType.MYSQL)
                .setDriverName("com.mysql.cj.jdbc.Driver")
                .setUrl("jdbc:mysql://localhost:3306/yeb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai")
                .setUsername("root")
                .setPassword("root");

        // 自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {

            }
        };

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

        // 自定义输出配置
        List<FileOutConfig> focList = new ArrayList<>();
        // 自定义配置会被优先输出
        // 定义了 mapper.xml 文件输出的位置!指向的是 resources/mapper/*
        focList.add(new FileOutConfig(templatePath) {

            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return parentPath + "/"+submoduleName+"/src/main/resources/mapper/"+tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);

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


        //3. 策略配置globalConfiguration中
        /**
         * StrategyConfig的主要属性配置
         * -- 全局大写命名
         * -- 数据库表映射到实体类的命名策略
         * -- 生成表(要生成实体类的表名,支持多表·11一起生成,以数组的形式填写)
         * -- 设置表的前缀(TablePrefix)
         */
        StrategyConfig stConfig = new StrategyConfig();
        //全局大写命名
        stConfig.setCapitalMode(true)
                // 数据库表映射到实体的命名策略
                .setNaming(NamingStrategy.underline_to_camel) // 驼峰命名
                // 数据库表字段映射实体类的命名策略
                .setColumnNaming(NamingStrategy.no_change) // 不做任何改变
                // lombok 模型
                .setEntityLombokModel(true)
                // 生成 @RestController 控制器
                .setRestControllerStyle(true)
                // 生成的表,多个表以英文逗号区分
                .setInclude(scanner("表名,多个英文逗号分割").split(",")) // 由 scanner 控制台输入多个表名进行逆向工程生成代码
                //url中驼峰转连字符
                .setControllerMappingHyphenStyle(true)
                // 设置表的前缀,防止生成实体类时出现表的前缀
                .setTablePrefix("t_");

        //4. 包名策略配置
        /**
         * PackageConfig的主要属性配置
         * 公共包--Parent
         */
        PackageConfig pkConfig = new PackageConfig();
        pkConfig.setParent(generatingPath)
                .setMapper("mapper")
                .setService("service")
                .setController("controller")
                .setServiceImpl("service.impl")
                .setEntity("pojo");
        // mapper.xml 之前在 InjectionConfig 那里配置过了
        //.setXml("mapper");

        //5. 整合配置
        /**
         * 整合需要的对象有:
         * --> GlobalConfig
         * --> DataSourceConfig
         * --> StrategyConfig
         * --> PackageConfig
         */
        ag.setGlobalConfig(config)
                .setDataSource(dsConfig)
                .setStrategy(stConfig)
                .setCfg(cfg)
                .setTemplate(templateConfig)
                .setTemplateEngine(new FreemarkerTemplateEngine())
                .setPackageInfo(pkConfig);
        //6. 执行
        ag.execute();
        System.out.println("======= 代码生成完毕 ========");
    }
}

上面应该能满足大部分基础的项目结构。需要注意的是前面几个路径的变量设置。

还有一个就是 mapper.xml 一般是在项目的 resource 目录下,如果需要设置到与 mapper 接口一个包下,就需要将 ag.setCfg(cfg) 删除,然后再 pkConfig.setXml("path") 保证与 setMapper("path") 保持一致即可。

标签:代码生成,String,mapper,--,生成,MP,new,工具,true
From: https://www.cnblogs.com/cndada/p/17188935.html

相关文章

  • Vulnhub之Tempus-Fugit-3靶机详细测试过程
    Tempus-Fugit-3识别目标主机IP地址(kali㉿kali)-[~/Desktop/Vulnhub/Tempus]└─$sudonetdiscover-ieth1-r192.168.56.0/24Currentlyscanning:Finished!|......
  • Denoising Diffusion Implicit Models
    DenoisingDiffusionImplicitModels目录DenoisingDiffusionImplicitModels概Motivation代码SongJ.,MengC.andErmonS.Denoisingdiffusionimplicitmodels.......
  • Unknown custom element: <deatils-form> - did you register the component correctl
    最近注册组件踩了一个坑。一直报错  查了些许资料挨个比对      重点!!!!以上这些都没问题的话,抓紧看看用组件的时候名字是不是写错了,我就是   ......
  • go pprof 性能分析工具
    安装 graphvizyuminstallgraphviz 开始采集:gotoolpprofhttp://192.168.100.100:1000/debug/pprof/heap输出svg文件,web可以查看#gotoolpprofhttp://1......
  • Spring中context:annotation-config和context:component-scan区别
    Spring中context:annotation-config和context:component-scan区别<context:annotation-config/>注解扫描是针对已经在Spring容器里注册过的Bean,即特定的一些后置bea......
  • MySQL 逻辑备份工具 MyDumper
    1、依赖安装dnfinstall-ycmakegccgcc-c++gitmake2、mydumper下载和安装#下载wgethttps://github.com/mydumper/mydumper/releases/download/v0.14.1-1/my......
  • Numpy之random.randint产生随机整数
    前言本文主要讲述了如何使用Numpy的random.randint来产生随机整数,我们演示了如何生成不同上限或下限的指定大小的数组方法numpy.random.randint(low,high=None,s......
  • 串口工具安装指南
    下载包:链接:https://pan.baidu.com/s/1okh2DeApiDqavB9EI2bbvg提取码:XXXX(是哦不是写给你看的,是你爸爸看的)一、安装流程: 解压压缩包,右键“管理员身份”运行scrt_sfx81-......
  • xilinx zynmp linux 开机自启动脚本添加
    下面以linx5.4.0-xilinx-v2020.1为例说明如何添加自启动脚本。linux系统内核启动完成后会加载第一个进程init,关于init进程的介绍参考博客https://zhuanlan.zhihu.com/p/......
  • mybatis-plus(mp)常用概念以及demo实操
    概念:作为国内流行的持久层框架,mp是mybatis的拓展,并不改变mybaits的底层,因此使用mybatis的项目可以无缝使用mp进行迭代本博客旨在温习mp常用的使用场景、使用方式(一)demo框......