经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MyBatis » 查看文章
mybatis-plus使用generator实现逆向工程
来源:jb51  时间:2022/5/9 11:08:37  对本文有异议

1.背景

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

2.引入jar包

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

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

  1. <!-- mybatis-plus begin -->
  2. <dependency>
  3. <groupId>com.baomidou</groupId>
  4. <artifactId>mybatis-plus-boot-starter</artifactId>
  5. <version>3.4.1</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.baomidou</groupId>
  9. <artifactId>mybatis-plus-generator</artifactId>
  10. <version>3.4.1</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>mysql</groupId>
  14. <artifactId>mysql-connector-java</artifactId>
  15. <version>5.1.44</version>
  16. </dependency>
  17.  
  18. <!-- mybatis-plus 默认是vm引擎 -->
  19. <dependency>
  20. <groupId>org.apache.velocity</groupId>
  21. <artifactId>velocity-engine-core</artifactId>
  22. <version>2.0</version>
  23. </dependency>
  24. <!-- mybatis-plus end -->

3.自动生成代码

  1. public static void main(String[] args) {
  2. // 构建一个代码生成器对象
  3. AutoGenerator mpg = new AutoGenerator();
  4. // 配置执行策略
  5. // 1.全局配置
  6. GlobalConfig gc = new GlobalConfig();
  7. // 当前项目路径
  8. String proPath = System.getProperty("user.dir");
  9. // 设置代码生成路径
  10. gc.setOutputDir(proPath + "/src/main/java");
  11. // 生成的类的注释中作者信息
  12. gc.setAuthor("curry");
  13. // 生成后是否打开文件夹
  14. gc.setOpen(false);
  15. // 是否覆盖
  16. gc.setFileOverride(true);
  17. // 生成service类的后缀
  18. gc.setServiceName("%sService");
  19. // 主键生成策略 和数据库id生成策略一致
  20. gc.setIdType(IdType.AUTO);
  21. // 设置日期类型
  22. gc.setDateType(DateType.ONLY_DATE);
  23. // 是否生成Swagger
  24. gc.setSwagger2(false);
  25. // 生成entity类的后缀
  26. gc.setEntityName("%sEntity");
  27. mpg.setGlobalConfig(gc);
  28.  
  29. // 2.设置数据源
  30. DataSourceConfig dsc = new DataSourceConfig();
  31. dsc.setUrl("jdbc:mysql://127.0.0.1:3306/test_db");
  32. dsc.setDriverName("com.mysql.jdbc.Driver");
  33. dsc.setUsername("root");
  34. dsc.setPassword("123456");
  35. dsc.setDbType(DbType.MYSQL);
  36. mpg.setDataSource(dsc);
  37.  
  38. // 3.配置生成包的路径
  39. PackageConfig pc = new PackageConfig();
  40. // 设置模块存放位置
  41. pc.setParent("com.");
  42. // 设置该模块包的路径
  43. pc.setModuleName("dao");
  44. pc.setEntity("entity");
  45. pc.setMapper("mapper");
  46. pc.setService("service");
  47. pc.setController("controller");
  48. mpg.setPackageInfo(pc);
  49.  
  50. // 4.策略配置
  51. StrategyConfig strategy=new StrategyConfig();
  52. // 设置要映射的表名 不配置默认处理全部表
  53. // strategy.setInclude("user");
  54. // 表名中下划线转驼峰命名
  55. strategy.setNaming(NamingStrategy.underline_to_camel);
  56. // 表中字段如果有下划线,转驼峰命名
  57. strategy.setColumnNaming(NamingStrategy.underline_to_camel);
  58. // strategy.setEntityLombokModel(true);//自动生成Lombok
  59. // strategy.setRestControllerStyle(true);//开启 RestFul 风格
  60. // strategy.setControllerMappingHyphenStyle(true);
  61. // 对表中的字段 设置逻辑删除 生成的dao层代码会添加@TableLogic
  62. strategy.setLogicDeleteFieldName("delete_flag");
  63.  
  64. // 5.自动填充 (表中如果有创建时间、修改时间话,可以使用自动填充)
  65. TableFill createTime = new TableFill("created_date", FieldFill.INSERT);
  66. TableFill updateTime = new TableFill("modified_date", FieldFill.INSERT_UPDATE);
  67. ArrayList<TableFill> tableFills = new ArrayList<>();
  68. tableFills.add(createTime);
  69. tableFills.add(updateTime);
  70. strategy.setTableFillList(tableFills);
  71. // 乐观锁配置
  72. // strategy.setVersionFieldName("version");
  73. mpg.setStrategy(strategy);
  74.  
  75. // 6.配置实体类模板
  76. TemplateConfig templateConfig = new TemplateConfig();
  77.  
  78. // 如果setXxxxx(null) 不会生成Xxxx实体类相关代码
  79. // 因此如果只生成dao层代码
  80. // 可以在这里控制
  81. templateConfig.setController(null);
  82. templateConfig.setMapper(null);
  83. templateConfig.setService(null);
  84. templateConfig.setServiceImpl(null);
  85. templateConfig.setXml(null);
  86. mpg.setTemplate(templateConfig);
  87.  
  88. // 7.执行代码生成操作
  89. mpg.execute();
  90. }

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

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

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

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

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

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

  1. templateConfig.setXml(null);

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

  1. // 自定义配置
  2. InjectionConfig cfg = new InjectionConfig() {
  3. @Override
  4. public void initMap() {
  5. // to do nothing
  6. }
  7. };
  8.  
  9. // 如果模板引擎是 freemarker
  10. // String templatePath = "/templates/mapper.xml.ftl";
  11. // 如果模板引擎是 velocity
  12. String templatePath = "/templates/mapper.xml.vm";
  13.  
  14. // 自定义输出配置
  15. List<FileOutConfig> focList = new ArrayList<>();
  16. // 自定义配置会被优先输出
  17. // 这里自定义配置的是*Mapper.xml文件
  18. // 所以templatePath = "/templates/mapper.xml.vm";
  19. // 如果你想自定义配置其它 修改templatePath即可
  20. focList.add(new FileOutConfig(templatePath) {
  21. @Override
  22. public String outputFile(TableInfo tableInfo) {
  23. // 自定义输出文件名 如果你 Entity 设置了前后缀
  24. String entityName = tableInfo.getEntityName();
  25. int length = entityName.length();
  26. entityName = entityName.substring(0, length - 6);
  27. return proPath + "/src/main/resources/mapper/" +
  28. entityName + "Mapper" + StringPool.DOT_XML;
  29. }
  30. });
  31.  
  32. cfg.setFileOutConfigList(focList);
  33. mpg.setCfg(cfg);

到此这篇关于mybatis-plus使用generator实现逆向工程的文章就介绍到这了,更多相关mybatis-plus generator 逆向工程内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号