Generator.java 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package com.dk.mdm.generator;
  2. import com.baomidou.mybatisplus.annotation.DbType;
  3. import com.baomidou.mybatisplus.annotation.FieldFill;
  4. import com.baomidou.mybatisplus.annotation.IdType;
  5. import com.baomidou.mybatisplus.generator.AutoGenerator;
  6. import com.baomidou.mybatisplus.generator.config.*;
  7. import com.baomidou.mybatisplus.generator.config.po.TableFill;
  8. import com.baomidou.mybatisplus.generator.config.rules.DateType;
  9. import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
  10. import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
  11. import lombok.extern.slf4j.Slf4j;
  12. import org.junit.Test;
  13. import org.junit.runner.RunWith;
  14. import org.springframework.boot.test.context.SpringBootTest;
  15. import org.springframework.test.context.junit4.SpringRunner;
  16. import java.util.ArrayList;
  17. /**
  18. * @desc : mybatis_plus逆向工程类
  19. * 引入的目的:
  20. * 1.解决每一个模块都要写的增删改查基础操作,
  21. * 像insert、deleteById、updateById、disableById、selectById这些通用功能以后不需要再手写xml了,
  22. * 2.表加列了,只需要在对应的entity中加属性,而也不需要我们再去维护操作单表的xml(关联查询还是要改的),
  23. * 3.避免出现一些大小写的低级错误,统一代码规范。
  24. * 4.让开发人员有更多的时间去转注于业务,避免重复无意义的工作。
  25. *
  26. * 但是mybatis_plus只针对于单表操作,引入其目的,是为了提升开发效率,它并不能代替开发人员去完成所有工作,
  27. * 比如关联分页条件查询、子查询、分组查询、多主键问题、和具体的业务还是需要我们去自行完成的。
  28. * 它的定位只是一个插件,不能作为一个完整的orm框架解决方案。没有完美的工具,择其善者而从之,其不善者而改之。
  29. * @author : 张潇木
  30. * @date : 2022-3-1 12:53
  31. */
  32. @SpringBootTest
  33. @RunWith(SpringRunner.class)//不加无法注入Mapper
  34. @Slf4j
  35. public class Generator {
  36. /**
  37. * @desc : 针对单表,自动生成增删改查sql、xml、mapper接口、service方法、controller接口
  38. * @author : 张潇木
  39. * @date : 2022-3-1 13:03
  40. */
  41. @Test
  42. public void generate(){
  43. //构建一个生成器对象
  44. AutoGenerator mpg = new AutoGenerator();
  45. //1、全局配置
  46. GlobalConfig gc = new GlobalConfig();
  47. String projectPath = System.getProperty("user.dir"); //获取当前目录
  48. gc.setOutputDir(projectPath+"/src/main/java"); //输出到哪个目录
  49. gc.setAuthor("姜永辉"); //作者
  50. gc.setOpen(false); //是否打开目录
  51. gc.setFileOverride(false); //是否覆盖
  52. gc.setServiceName("%sService"); //去Service的I前缀
  53. gc.setServiceImplName("%sService");
  54. gc.setIdType(IdType.AUTO); //主键策略
  55. gc.setBaseResultMap(true); //SQL 映射文件
  56. gc.setBaseColumnList(true); //SQL 片段
  57. gc.setDateType(DateType.ONLY_DATE); //时间类型
  58. gc.setSwagger2(true); //Swagger
  59. mpg.setGlobalConfig(gc);
  60. //2、设置数据源
  61. DataSourceConfig dsc = new DataSourceConfig();
  62. dsc.setUsername("dkic_b");
  63. dsc.setPassword("dk");
  64. dsc.setUrl("jdbc:postgresql://dkdev.dkiboss.com:15000/dkic_dev_b1");
  65. dsc.setSchemaName("dkic_b");
  66. dsc.setDriverName("org.postgresql.Driver");
  67. dsc.setDbType(DbType.POSTGRE_SQL);
  68. mpg.setDataSource(dsc);
  69. //3、包的配置
  70. PackageConfig pc = new PackageConfig();
  71. // pc.setModuleName("task"); //模块包名
  72. pc.setParent("com.dk.mdm"); //父包路径
  73. pc.setEntity("model.pojo.mst"); //实体层路径
  74. pc.setMapper("mapper.mst"); //mapper层路径
  75. pc.setXml("mapper.mst"); //xml层路径
  76. pc.setServiceImpl("service.mst"); //业务层路径
  77. pc.setController("controller.mst"); //控制层路径
  78. //app相关路径
  79. // pc.setEntity("model.app.pojo.pset"); //实体层路径
  80. // pc.setMapper("mapper.app.pset"); //mapper层路径
  81. // pc.setXml("mapper.app.pset"); //xml层路径
  82. // pc.setServiceImpl("service.app.pset"); //业务层路径
  83. // pc.setController("controller.app.pset"); //控制层路径
  84. mpg.setPackageInfo(pc);
  85. //4、策略配置
  86. StrategyConfig strategy = new StrategyConfig();
  87. strategy.setTablePrefix("t_mst"); //表名前缀
  88. strategy.setInclude("t_mst_setting_value"); //设置要映射的表名,只需改这里即可,可以是一个数组,一次性生成多张表。
  89. // strategy.setInclude("t_mst_setting_value"); //设置要映射的表名,只需改这里即可,可以是一个数组,一次性生成多张表。
  90. strategy.setNaming(NamingStrategy.underline_to_camel); //转驼峰
  91. strategy.setColumnNaming(NamingStrategy.underline_to_camel); //字段下划线转驼峰
  92. strategy.setEntityLombokModel(true); //是否使用lombok开启注解
  93. strategy.setSuperEntityClass("com.dk.common.pojo.PageInfo"); //实体基类
  94. strategy.setSuperControllerClass("com.dk.common.controller.BaseController"); //实体基类
  95. strategy.setSuperServiceImplClass("com.dk.common.service.BaseService"); //service基类
  96. strategy.setSuperMapperClass("com.dk.common.mapper.BaseMapper"); //mapper基类
  97. // strategy.setVersionFieldName("version"); //乐观锁配置
  98. strategy.setRestControllerStyle(true); //开启驼峰命名
  99. strategy.setControllerMappingHyphenStyle(true); //localhost:8080/hello_id_2
  100. // 逻辑删除标识,逻辑删除是为了方便数据恢复和保护数据本身价值等等的一种方案,但实际就是删除。
  101. // 如果你需要再查出来就不应使用逻辑删除,而是以一个状态去表示。
  102. // 硬写:yml中logic-not-delete-value: 1 or value_flag=0
  103. // 如: 员工离职,账号被锁定等都应该是一个状态字段,此种场景不应使用逻辑删除。
  104. // 若确需查找删除数据,如老板需要查看历史所有数据的统计汇总信息,请单独手写sql。
  105. // strategy.setLogicDeleteFieldName("flg_del"); //逻辑删除字段,所有的查询都会自动带上value_flag=1这个条件。
  106. // 自动填充配置
  107. TableFill createTime = new TableFill("op_create_time", FieldFill.INSERT); //创建时间
  108. // TableFill updateTime = new TableFill("op_update_time", FieldFill.INSERT_UPDATE); //更新时间
  109. ArrayList<TableFill> tableFills = new ArrayList<>();
  110. tableFills.add(createTime);
  111. // tableFills.add(updateTime);
  112. strategy.setTableFillList(tableFills);
  113. mpg.setStrategy(strategy);
  114. //5、 自定义模板配置 放置自己项目的 src/main/resources/mp_templates 目录下, 默认名称一下可以不配置,也可以自定义模板名称
  115. TemplateConfig tc = new TemplateConfig();
  116. tc.setEntity("/mp_templates/entity.java");
  117. tc.setXml("/mp_templates/mapper.xml") // 设置生成xml的模板
  118. .setEntity("/mp_templates/entity.java") // 设置生成entity的模板
  119. .setMapper("/mp_templates/mapper.java") // 设置生成mapper的模板
  120. .setController("/mp_templates/controller.java") // 设置生成service的模板
  121. .setService(null) // 设置生成serviceImpl的模板
  122. .setServiceImpl("/mp_templates/serviceImpl.java"); // 设置生成controller的模板
  123. mpg.setTemplate(tc);
  124. mpg.setTemplateEngine(new FreemarkerTemplateEngine()); // 选择 freemarker引擎,注意 pom 依赖必须有!
  125. mpg.execute();//执行
  126. }
  127. }