配置mybatis-plus-generator自动生成实体相关代码

2023-05-16

配置mybatis-plus-generator自动生成实体相关代码今天分享,mybatis-plus是常用的组件,使用方便,而且可以有自动生成代码的配置,使用方便:

1、pom相关jar引入

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>

        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.28</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
            <version>1.7</version>
        </dependency>

2、核心工具伪代码

package com.example.demo1.util;

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 java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author wanghuainan
 *  1.注释调的代码自己根据需求参考使用
 *  2.tableNames 添加要生成的表明
 *  3.将repository包下的生成实现中的注解@Service 换成@Repository 方便层级清晰
 */
public class CommonMyBatisPlusGenerator {

    public static void main(String[] args) {
        AutoGenerator autoGenerator = new AutoGenerator();
        //1、全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setFileOverride(true);
        String projectPath = System.getProperty("user.dir");
        String filePath = projectPath + "/src/main/java";
        String filePathRe = projectPath + "/src/main/resources/";
        gc.setOutputDir(filePath);  //生成路径(一般都是生成在此项目的src/main/java下面)
        gc.setAuthor("nandao@.com"); //设置作者
        gc.setOpen(false);

        // 自定义文件命名,注意 %s 会自动填充表实体属性!
        gc.setFileOverride(true); //第二次生成会把第一次生成的覆盖掉
        gc.setBaseResultMap(true); //生成resultMap
        gc.setControllerName("%sController");
        gc.setServiceName("I"+"%sRepository");
        gc.setServiceImplName("%sRepImpl");
        gc.setMapperName("I"+"%sMapper");
        gc.setXmlName("%sMapper");
        //    gc.setSwagger2(true);
        gc.setEntityName("%sEntity");
        autoGenerator.setGlobalConfig(gc);
        //2、数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://18.1.0.9:3360/user_test?useUnicode=true&serverTimezone=GMT&useSSL=false" +
                "&characterEncoding=utf8");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        autoGenerator.setDataSource(dsc);

        // 3、包配置(包名配置)
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.example.demo1");
        pc.setService("repository");
        pc.setServiceImpl("repository.impl");
        autoGenerator.setPackageInfo(pc);

        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                Map<String, Object> map = new HashMap<String, Object>();
                this.setMap(map);
            }
        };
        // 调整 xml 生成目录演示
        List<FileOutConfig> focList = new ArrayList<>();
        focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return filePathRe + "\\mapper\\" + tableInfo.getEntityName() + "Mapper.xml";
            }
        });
        cfg.setFileOutConfigList(focList);
        autoGenerator.setCfg(cfg);

        // 配置模板
        TemplateConfig templateConfig = new TemplateConfig();
        //控制 不生成 controller
        templateConfig.setController("");
        //templateConfig.setService("");
        //templateConfig.setEntity("");
        //templateConfig.setServiceImpl("");
        //templateConfig.setMapper("");
        //将mapper包  下面生成的xml文件移动到跟目录下的resources/mapper包下,若不用则不需要打开;如果注释调,则两个地方都有xml文件
        templateConfig.setXml("");
        autoGenerator.setTemplate(templateConfig);

        // 4、策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        // 表名前缀
        strategy.setTablePrefix("t_");
        //使用lombok
        //  strategy.setEntityLombokModel(true);

        // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
        String[] tableNames={"undo_log"};
        strategy.setInclude(tableNames);

        //数据库表映射到实体的命名策略
        //  strategy.setNaming(NamingStrategy.underline_to_camel);
        //数据库表字段映射到实体的命名策略, 未指定按照 naming 执行
        //   strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        //自定义继承的Entity类全称,带包名
        //  strategy.setSuperEntityClass(null);
        //【实体】是否为lombok模型(默认 false)
        //   strategy.setEntityLombokModel(true);
        //生成 @RestController 控制器
        // strategy.setRestControllerStyle(true);
        //自定义继承的Controller类全称,带包名
        //  strategy.setSuperControllerClass(null);
        //表名
       /* if (tableNameArray != null && tableNameArray.length != 0) {
            strategy.setInclude(tableNameArray);
        }*/
        //自定义基础的Entity类,公共字段
        //  strategy.setSuperEntityColumns(null);
        //驼峰转连字符
        //   strategy.setControllerMappingHyphenStyle(true);
        //表前缀
        //   strategy.setTablePrefix(pc.getModuleName() + "_");
        autoGenerator.setStrategy(strategy);
        //5、执行
        autoGenerator.execute();
    }
}

3、执行后生成的目录结构:

 4、控制台日志:

 到此,生成分享完毕,亲测好用!

注意:此类工具类文件尽量放在test目录里,避免不小心是生产环境出问题!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

配置mybatis-plus-generator自动生成实体相关代码 的相关文章

  • 如何在java中生成所有可能的64位随机值?

    是否有JavaSecureRandom nextLong 返回所有可能的值 因为它继承自Random它只使用 48 位 如果没有 我仍然可以在 Java 中通过修改 Random 类来实现它吗 如何做到这一点 我只想使用一个全随机长数生成器
  • 协程、延续、生成器

    协程 延续和生成器有什么区别 我将从生成器开始 因为它们是最简单的情况 正如 zvolkov 提到的 它们是可以重复调用而不返回的函数 对象 但在调用时将返回 产生 一个值 然后挂起它们的执行 当他们再次被调用时 他们将从上次暂停执行的地方
  • 使用 asyncio 并行化生成器

    我的应用程序从慢速 I O 源读取数据 进行一些处理 然后将其写入本地文件 我已经用生成器实现了这个 如下所示 import time def io task x print requesting data for input s x ti
  • 为什么 TypeScript Iterable Iterator<> 和 Generator<> 泛型略有不同?

    在 TypeScript 中 3 6 3 发电机几乎与可迭代迭代器 When 发电机延伸迭代器 它默认第三个通用参数 TNext to unknown 迭代器本身默认TNext to 不明确的 So 发电机 and Iterator and
  • 如何对生成器对象或迭代器进行切片?

    我想循环遍历迭代器的 切片 我不确定这是否可能 因为我知道不可能对迭代器进行切片 我想做的是这样的 def f for i in range 100 yield i x f for i in x 95 print i 这当然失败了 Type
  • Mac OS Mavericks 上的 NPM 安装问题

    我正在尝试掌握 AngularJS NodeJS 和 Ruby on Rails 当尝试安装 yeoman grunt 等 npm 软件包时 我在终端中收到一个错误 如下所示 npm ERR Error EACCES open Users
  • 在回调中使用yield?

    我有一个函数y 这应该会产生一些记录 然而 该函数在回调中获取记录 并将其传递给另一个函数d 访问数据 d 不返回或产生任何东西 如果其他功能 这种模式是否可能d 接受回调被认为是黑匣子 替代设计是什么 function y d funct
  • Java MyBatis 存储过程调用带 OUT 参数

    第一个问题 我试图返回一个 OUT 参数 而不是带注释的结果集 首先 这可能吗 如果是的话 人们会怎样做呢 MyBatis 3 0 6 数据库 SQL Server 2008 以下是我在 UserDAO 中调用方法的语法示例 Select
  • Python 自定义 Zipf 数字生成器性能不佳

    我需要一个类似 Zipf 的自定义数字生成器 因为numpy random zipf功能没有达到我所需要的 首先 其alpha必须大于1 0我需要一个 alpha0 5 其次 它的基数与样本大小直接相关 我需要制作比基数更多的样本 例如从只
  • 从发电机生成

    我有一个生成器 它接受一个数字作为参数并生成其他数字 我想使用这个生成器生成的数字并将它们作为参数传递给同一个生成器 创建一个一定长度的链 例如 mygenerator 2 生成 5 4 和 6 将 mygenerator 应用于这些数字中
  • (如何)我可以在 MyBatis 的 SQL 查询中安全且与数据库无关地使用“LIKE”吗?

    In MyBatis http www mybatis org 您可以标记参数应插入到 SQL 中的位置 如下所示 从人员中选择 其中 id id 此语法会激活正确的转义等 以避免 SQL 注入攻击等 如果您有可信输入并且想要跳过转义 您可
  • Keras:使用 flow_from _directory() 函数为两个输入模型创建自定义生成器

    我试图用以下方法训练我的暹罗网络fit generator 我从这个答案中了解到 Keras 如何将 fit generator 与多个输入一起使用 https stackoverflow com questions 49404993 ke
  • Mybatis 期望 selectOne() 返回一个结果(或 null),但发现:190

    我正在尝试从数据库检索值 但无法获取所有值 我正进入 状态TooManyResultsException 映射器接口 这是我正在调用的映射器接口 public interface ITranslatorDAO Map
  • Windows 中 CMake 的默认生成器是什么?

    在一台 PC 上运行 CMake 时 CMake 默认生成 NMake 文件 另一方面 它生成一个 Visual Studio 项目 我知道我可以通过添加来覆盖默认值 G NMake Makefiles 到我的 CMake 语句的末尾 但我
  • 测试代码覆盖 javascript es6 生成器 (redux-saga / istanbul.js)

    我使用 redux saga 编写了一些测试 我尝试使用 istanbul js 生成代码覆盖率 它对于大多数代码都工作得很好 但是传奇的结果被破坏了 看起来像是随机信息 有人知道如何解决这个问题吗 我个人使用 Jest 它包括代码覆盖率
  • Python 中基于收益的协程与带有 @asyncio.coroutine 和 @types.coroutine 装饰器的协程有何不同?

    我一直在尝试理解异步编程 尤其是 Python 中的异步编程 我知道 asyncio 是基于事件循环构建的 该事件循环安排协程的执行 但我已经阅读了几种定义协程的不同方法 并且我很困惑它们如何相互关联 I read 本文 http masn
  • 将yield语句转换为Python中的生成器表达式

    我有一个关于将yield语句转换为生成器表达式的问题 所以我有一个小的yield方法 它获取一个函数和一个起始数字作为其输入 并且基本上为每个先前被调用的数字调用该函数 即 第一次调用返回初始号码 第二次调用返回函数 初始编号 第三次调用返
  • 随机数生成器每次仅返回一个数字

    Python 是否有一个随机数生成器 每次只返回一个随机整数next 函数被调用 数字不应该重复并且生成器应返回区间内的随机整数 1 1 000 000 这是独一无二的 我需要生成超过一百万个不同的数字 这听起来好像非常消耗内存 以防所有数
  • NotImplementedError:尚未为未构建的模型子类启用“fit_generator”

    我正在使用以下代码 import tensorflow as tf traindata tf keras preprocessing image ImageDataGenerator rescale 1 255 shear range 0
  • 使用 python 生成器高效创建 scipy.lil_matrix

    我有一个生成单一维度的生成器numpy arrays 的长度相同 我想要一个包含该数据的稀疏矩阵 行的生成顺序与我希望它们出现在最终矩阵中的顺序相同 csr矩阵优于lil矩阵 但我认为后者在我描述的场景中更容易构建 假设row gen是一个

随机推荐