飞道的博客

收藏夹吃灰系列(一):你一定没用过的代码生成工具,好不好用你们说了算

460人阅读  评论(0)

数据库类型:mysql 

       很多时候,会想手动创建controller、service及impl、mapper、entity等很繁琐,特别是新项目起始阶段,随着数据库的设计,然后业务接口、mapper接口、实体类等都要一一创建好,大家会不会有这样的烦恼,想着是否有能代替手动创建对应的类实体接口,岂不美哉。

       于是我要送给大家的是,一个超级好用的代码生成工具类,支持手动定义某些表创建对应的控制器等还对生成的文件归类到自定义好的文件夹中,操作只需启动该类的main方法,就会自动生成对应的类接口实体,这你真值得拥有,不信你试试。

       如果最后觉得该代码生成器对你有所帮助,请不要吝啬你的赞,直接pia的点亮就完了啦,up up up!!!

       现在我把它分享出来,如下就是全码,拿走!不谢!!助你趁早解放双手!


  
  1. package com.system.xiaoma.utils;
  2. import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
  3. import com.baomidou.mybatisplus.core.toolkit.StringUtils;
  4. import com.baomidou.mybatisplus.generator.AutoGenerator;
  5. import com.baomidou.mybatisplus.generator.InjectionConfig;
  6. import com.baomidou.mybatisplus.generator.config.*;
  7. import com.baomidou.mybatisplus.generator.config.po.TableInfo;
  8. import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
  9. import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. import java.util.Scanner;
  13. public class MyGenerator {
  14. public static String scanner(String tip) {
  15. Scanner scanner = new Scanner(System.in);
  16. StringBuilder help = new StringBuilder();
  17. help.append( "请输入" + tip + ":");
  18. System.out.println(help.toString());
  19. if (scanner.hasNext()) {
  20. String ipt = scanner.next();
  21. if (StringUtils.isNotEmpty(ipt)) {
  22. return ipt;
  23. }
  24. }
  25. throw new MybatisPlusException( "请输入正确的" + tip + "!");
  26. }
  27. public static void main(String[] args){
  28. // 代码生成器
  29. AutoGenerator mpg = new AutoGenerator();
  30. // 全局配置
  31. GlobalConfig gc = new GlobalConfig();
  32. String projectPath = System.getProperty( "user.dir");
  33. gc.setOutputDir(projectPath + "/src/main/java");
  34. gc.setAuthor( "luoyong");
  35. gc.setOpen( false);
  36. gc.setFileOverride( true); // 是否覆盖同名文件,默认是false
  37. gc.setActiveRecord( true); // 不需要ActiveRecord特性的请改为false
  38. gc.setEnableCache( false); // XML 二级缓存
  39. gc.setBaseResultMap( true); // XML ResultMap 生成基本的resultmap
  40. gc.setBaseColumnList( true); // XML columList 生成基本的sql片段
  41. //实体属性 Swagger2 注解
  42. gc.setSwagger2( true);
  43. mpg.setGlobalConfig(gc);
  44. // 数据源配置
  45. DataSourceConfig dsc = new DataSourceConfig();
  46. dsc.setUrl( "jdbc:mysql://localhost:3306/fk_system?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true");
  47. dsc.setDriverName( "com.mysql.cj.jdbc.Driver");
  48. dsc.setUsername( "root");
  49. dsc.setPassword( "123456");
  50. mpg.setDataSource(dsc);
  51. // 包配置
  52. PackageConfig pc = new PackageConfig();
  53. //pc.setModuleName(scanner("模块名"));
  54. pc.setParent( "com.system.xiaoma");
  55. pc.setEntity( "entity");
  56. pc.setMapper( "mapper");
  57. pc.setService( "service");
  58. pc.setServiceImpl( "service.impl");
  59. mpg.setPackageInfo(pc);
  60. // 自定义配置
  61. InjectionConfig cfg = new InjectionConfig() {
  62. @Override
  63. public void initMap() {
  64. // to do nothing
  65. }
  66. };
  67. // 自定义输出配置
  68. List<FileOutConfig> focList = new ArrayList<>();
  69. // 自定义配置会被优先输出
  70. focList.add( new FileOutConfig( "/templates/mapper.xml.ftl") {
  71. @Override
  72. public String outputFile(TableInfo tableInfo) {
  73. // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
  74. return projectPath + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper" + ".xml";
  75. }
  76. });
  77. cfg.setFileOutConfigList(focList);
  78. mpg.setCfg(cfg);
  79. // 策略配置
  80. StrategyConfig strategy = new StrategyConfig();
  81. strategy.setNaming(NamingStrategy.underline_to_camel);
  82. strategy.setColumnNaming(NamingStrategy.underline_to_camel);
  83. strategy.setSuperEntityClass( "com.system.xiaoma.base.BaseEntity");
  84. strategy.setEntityLombokModel( false);
  85. strategy.setRestControllerStyle( true);
  86. // 公共父类
  87. strategy.setSuperControllerClass( "com.system.xiaoma.base.BaseController");
  88. // 写于父类中的公共字段
  89. // strategy.setSuperEntityColumns("id");
  90. strategy.setInclude(scanner( "表名,多个英文逗号分割").split( ","));
  91. strategy.setControllerMappingHyphenStyle( true);
  92. strategy.setTablePrefix(pc.getModuleName() + "_");
  93. TemplateConfig tc = new TemplateConfig();
  94. tc.setXml( null);
  95. mpg.setTemplate(tc);
  96. mpg.setStrategy(strategy);
  97. mpg.setTemplateEngine( new FreemarkerTemplateEngine());
  98. mpg.execute();
  99. }
  100. }

如下我给大家演示一下,确保所有小伙伴都能掌握:

1、启动main方法之后,在控制台会如下展示,按需输入要生成的数据库表名称,多表按英文逗号隔开;最后回车即可。

2、几秒就生成好了,最后一行会自动打印出文件生成完成!显示全部生成成功了。

 

3、你刷新下项目,生成的文件夹及文件都在。


如果文章对您有所帮助,就在文章的右上角或者文章的末尾点个赞吧!

如果喜欢我分享的文章,就请给我个关注吧!(๑′ᴗ‵๑)づ╭❤~。

对文章有任何问题欢迎小伙伴们下方留言或者入群探讨【群号:708072830】。

鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复讨论(请勿发表攻击言)。

版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明,版权所有,盗版必究!


转载:https://blog.csdn.net/weixin_43970743/article/details/115917110
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场