mybatis-plus使用generator实现逆向工程

作者:菜鸟菜 时间:2022-06-05 20:16:49 

1.背景

可以使用mybatis-plus-generator逆向生成dao层、service层、controller层等代码

2.引入jar包

mybatis-plus-generator在3.5.0以及以后的版本使用新的方式逆向生成代码。

这里介绍使用旧版本的方式生成代码。

<!-- mybatis-plus begin -->
   <dependency>
           <groupId>com.baomidou</groupId>
           <artifactId>mybatis-plus-boot-starter</artifactId>
           <version>3.4.1</version>
   </dependency>
   <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>5.1.44</version>
   </dependency>

<!-- mybatis-plus 默认是vm引擎 -->
   <dependency>
           <groupId>org.apache.velocity</groupId>
           <artifactId>velocity-engine-core</artifactId>
           <version>2.0</version>
   </dependency>
   <!-- mybatis-plus end -->

3.自动生成代码

public static void main(String[] args) {
       // 构建一个代码生成器对象
       AutoGenerator mpg = new AutoGenerator();
       // 配置执行策略
       // 1.全局配置
       GlobalConfig gc = new GlobalConfig();
       // 当前项目路径
       String proPath = System.getProperty("user.dir");
       // 设置代码生成路径
       gc.setOutputDir(proPath + "/src/main/java");
       // 生成的类的注释中作者信息
       gc.setAuthor("curry");
       // 生成后是否打开文件夹
       gc.setOpen(false);
       // 是否覆盖
       gc.setFileOverride(true);
       // 生成service类的后缀
       gc.setServiceName("%sService");
       // 主键生成策略 和数据库id生成策略一致
       gc.setIdType(IdType.AUTO);
       // 设置日期类型
       gc.setDateType(DateType.ONLY_DATE);
       // 是否生成Swagger
       gc.setSwagger2(false);
       // 生成entity类的后缀
       gc.setEntityName("%sEntity");
       mpg.setGlobalConfig(gc);

// 2.设置数据源
       DataSourceConfig dsc = new DataSourceConfig();
       dsc.setUrl("jdbc:mysql://127.0.0.1:3306/test_db");
       dsc.setDriverName("com.mysql.jdbc.Driver");
       dsc.setUsername("root");
       dsc.setPassword("123456");
       dsc.setDbType(DbType.MYSQL);
       mpg.setDataSource(dsc);

// 3.配置生成包的路径
       PackageConfig pc = new PackageConfig();
       // 设置模块存放位置
       pc.setParent("com.");
       // 设置该模块包的路径
       pc.setModuleName("dao");
       pc.setEntity("entity");
       pc.setMapper("mapper");
       pc.setService("service");
       pc.setController("controller");
       mpg.setPackageInfo(pc);

// 4.策略配置
       StrategyConfig strategy=new StrategyConfig();
       // 设置要映射的表名 不配置默认处理全部表
       // strategy.setInclude("user");
       // 表名中下划线转驼峰命名
       strategy.setNaming(NamingStrategy.underline_to_camel);
       // 表中字段如果有下划线,转驼峰命名
       strategy.setColumnNaming(NamingStrategy.underline_to_camel);
       // strategy.setEntityLombokModel(true);//自动生成Lombok
       // strategy.setRestControllerStyle(true);//开启 RestFul 风格
       // strategy.setControllerMappingHyphenStyle(true);
       // 对表中的字段 设置逻辑删除 生成的dao层代码会添加@TableLogic
       strategy.setLogicDeleteFieldName("delete_flag");

// 5.自动填充 (表中如果有创建时间、修改时间话,可以使用自动填充)
       TableFill createTime = new TableFill("created_date", FieldFill.INSERT);
       TableFill updateTime = new TableFill("modified_date", FieldFill.INSERT_UPDATE);
       ArrayList<TableFill> tableFills = new ArrayList<>();
       tableFills.add(createTime);
       tableFills.add(updateTime);
       strategy.setTableFillList(tableFills);
       // 乐观锁配置
       // strategy.setVersionFieldName("version");
       mpg.setStrategy(strategy);

// 6.配置实体类模板
       TemplateConfig templateConfig = new TemplateConfig();

// 如果setXxxxx(null) 不会生成Xxxx实体类相关代码
       // 因此如果只生成dao层代码
       // 可以在这里控制
       templateConfig.setController(null);
       templateConfig.setMapper(null);
       templateConfig.setService(null);
       templateConfig.setServiceImpl(null);
       templateConfig.setXml(null);
       mpg.setTemplate(templateConfig);

// 7.执行代码生成操作
       mpg.execute();
   }

4.修改*Mapper.xml文件的生成位置

4.1 默认*Mapper.xml文件生成位置

// 3.配置生成包的路径
   PackageConfig pc = new PackageConfig();
   // 设置模块存放位置
   pc.setParent("com.");
   // 设置该模块包的路径
   pc.setModuleName("dao");
   pc.setEntity("entity");
   pc.setMapper("mapper");
   pc.setService("service");
   pc.setController("controller");
   mpg.setPackageInfo(pc);

以上面代码为例,*Mapper.xml文件位置是mapper/xml/*Mapper.xml

4.2 修改*Mapper.xml文件生成位置

step1:在模板中控制不生成xml文件 防止重复生成

templateConfig.setXml(null);

step2:在第三步中mpg.execute();执行前增加以下代码

// 自定义配置
   InjectionConfig cfg = new InjectionConfig() {
           @Override
           public void initMap() {
                   // to do nothing
           }
   };

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

// 自定义输出配置
   List<FileOutConfig> focList = new ArrayList<>();
   // 自定义配置会被优先输出
   // 这里自定义配置的是*Mapper.xml文件
   // 所以templatePath = "/templates/mapper.xml.vm";
   // 如果你想自定义配置其它 修改templatePath即可
   focList.add(new FileOutConfig(templatePath) {
           @Override
           public String outputFile(TableInfo tableInfo) {
                   // 自定义输出文件名 如果你 Entity 设置了前后缀
                   String entityName = tableInfo.getEntityName();
                   int length = entityName.length();
                   entityName = entityName.substring(0, length - 6);
                   return proPath + "/src/main/resources/mapper/" +
                           entityName + "Mapper" + StringPool.DOT_XML;
           }
   });

cfg.setFileOutConfigList(focList);
   mpg.setCfg(cfg);

来源:https://juejin.cn/post/7095284828781674509

标签:mybatis-plus,generator,逆向工程
0
投稿

猜你喜欢

  • Java编程利用socket多线程访问服务器文件代码示例

    2023-10-11 15:36:37
  • java多线程抓取铃声多多官网的铃声数据

    2023-12-18 23:20:05
  • 详解Java中方法重写和方法重载的6个区别

    2023-11-28 13:42:18
  • OpenCV实现直线检测并消除

    2023-07-12 20:44:36
  • Spring Boot如何使用Spring Security进行安全控制

    2022-03-26 03:59:41
  • Java设计模式之监听器模式实例详解

    2022-10-04 02:51:44
  • c# 关闭窗体时提示的小例子

    2021-11-10 19:08:18
  • 为什么说HashMap线程不安全

    2022-08-05 22:01:23
  • Android解决ScrollView下嵌套ListView和GridView中内容显示不全的问题

    2023-09-26 23:32:58
  • 基于java查找并打印输出字符串中字符出现次数

    2022-07-28 19:45:47
  • Kotlin协程之Flow基础原理示例解析

    2021-10-17 21:07:44
  • android通过拼音搜索中文的功能实现代码

    2022-03-12 04:48:17
  • 微信js sdk invalid signature签名错误问题的解决方法分析

    2021-07-26 02:26:47
  • java中@SuppressWarnings注解用法详解

    2023-09-20 23:11:40
  • 详解JAVA 弱引用

    2022-03-12 01:30:29
  • springcloud整合seata的实现代码

    2022-04-26 23:49:49
  • Java Socket编程服务器响应客户端实例代码

    2023-08-09 03:25:51
  • 浅谈java 单例模式DCL的缺陷及单例的正确写法

    2022-04-14 05:58:23
  • C#如何访问共享文件夹或者磁盘

    2023-11-08 09:43:44
  • java实现简单的猜数字小游戏

    2023-11-11 12:55:40
  • asp之家 软件编程 m.aspxhome.com