今天使用了mybatis-plus旧版代码自动生成器。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.wms.common; 2 import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; 3 import com.baomidou.mybatisplus.core.toolkit.StringPool; 4 import com.baomidou.mybatisplus.core.toolkit.StringUtils; 5 import com.baomidou.mybatisplus.generator.AutoGenerator; 6 import com.baomidou.mybatisplus.generator.InjectionConfig; 7 import com.baomidou.mybatisplus.generator.config.*; 8 import com.baomidou.mybatisplus.generator.config.po.TableInfo; 9 import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; 10 import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; 11 import java.util.ArrayList; 12 import java.util.List; 13 import java.util.Scanner; 14 public class CodeGenerator { 15 /** 16 * <p> 17 * 读取控制台内容 18 * </p> 19 */ 20 public static String scanner(String tip) { 21 Scanner scanner = new Scanner(System.in); 22 StringBuilder help = new StringBuilder(); 23 help.append("请输⼊" + tip + ":"); 24 System.out.println(help.toString()); 25 if (scanner.hasNext()) { 26 String ipt = scanner.next(); 27 if (StringUtils.isNotBlank(ipt)) { 28 return ipt; 29 } 30 } 31 throw new MybatisPlusException("请输⼊正确的" + tip + "!"); 32 } 33 /** 34 * 操作步骤: 35 * 1.修改数据源包括地址密码信息,对应代码标记:⼀、 下同 36 * 2.模块配置,可以修改包名 37 * 3.修改模板(这步可忽略) 38 * @param args 39 */ 40 public static void main(String[] args) { 41 // 代码⽣成器 42 AutoGenerator mpg = new AutoGenerator(); 43 // 全局配置 44 GlobalConfig gc = new GlobalConfig(); 45 String projectPath = System.getProperty("user.dir"); 46 gc.setOutputDir(projectPath + "/src/main/java"); 47 gc.setAuthor("yzq"); 48 gc.setOpen(false); 49 gc.setSwagger2(true); //实体属性 Swagger2 注解 50 gc.setBaseResultMap(true);// XML ResultMap 51 gc.setBaseColumnList(true);// XML columList 52 //去掉service接⼝⾸字⺟的I, 如DO为User则叫UserService 53 gc.setServiceName("%sService"); 54 mpg.setGlobalConfig(gc); 55 // 数据源配置 56 DataSourceConfig dsc = new DataSourceConfig(); 57 // ⼀、修改数据源 58 dsc.setUrl("jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=UTF8&useSSL=false"); 59 // dsc.setSchemaName("public"); 60 dsc.setDriverName("com.mysql.cj.jdbc.Driver"); 61 dsc.setUsername("root"); 62 dsc.setPassword("123456"); 63 mpg.setDataSource(dsc); 64 // 包配置 65 PackageConfig pc = new PackageConfig(); 66 //pc.setModuleName(scanner("模块名")); 67 // ⼆、模块配置 68 pc.setParent("com.wms") 69 .setEntity("entity") 70 .setMapper("mapper") 71 .setService("service") 72 .setServiceImpl("service.impl") 73 .setController("controller"); 74 mpg.setPackageInfo(pc); 75 // ⾃定义配置 76 InjectionConfig cfg = new InjectionConfig() { 77 @Override 78 public void initMap() { 79 // to do nothing 80 } 81 }; 82 // 如果模板引擎是 freemarker 83 String templatePath = "templates/mapper.xml.ftl"; 84 // 如果模板引擎是 velocity 85 // String templatePath = "/templates/mapper.xml.vm"; 86 // ⾃定义输出配置 87 List<FileOutConfig> focList = new ArrayList<>(); 88 // ⾃定义配置会被优先输出 89 focList.add(new FileOutConfig(templatePath) { 90 @Override 91 public String outputFile(TableInfo tableInfo) { 92 // ⾃定义输出⽂件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发⽣变化!! 93 return projectPath + "/src/main/resources/mapper/" + pc.getModuleName() 94 + "/" + tableInfo.getEntityName() + "Mapper" + 95 StringPool.DOT_XML; 96 } 97 }); 98 /* 99 cfg.setFileCreate(new IFileCreate() { 100 @Override 101 public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, 102 String filePath) { 103 // 判断⾃定义⽂件夹是否需要创建 104 checkDir("调⽤默认⽅法创建的⽬录,⾃定义⽬录⽤"); 105 if (fileType == FileType.MAPPER) { 106 // 已经⽣成 mapper ⽂件判断存在,不想重新⽣成返回 false 107 return !new File(filePath).exists(); 108 } 109 // 允许⽣成模板⽂件 110 return true; 111 } 112 }); 113 */ 114 cfg.setFileOutConfigList(focList); 115 mpg.setCfg(cfg); 116 // 配置模板 117 TemplateConfig templateConfig = new TemplateConfig(); 118 // 配置⾃定义输出模板 119 //指定⾃定义模板路径,注意不要带上.ftl/.vm, 会根据使⽤的模板引擎⾃动识别 120 // 三、修改模板 121 /*templateConfig.setEntity("templates/entity2.java"); 122 templateConfig.setService("templates/service2.java"); 123 templateConfig.setController("templates/controller2.java"); 124 templateConfig.setMapper("templates/mapper2.java"); 125 templateConfig.setServiceImpl("templates/serviceimpl2.java");*/ 126 templateConfig.setXml(null); 127 mpg.setTemplate(templateConfig); 128 // 策略配置 129 StrategyConfig strategy = new StrategyConfig(); 130 strategy.setNaming(NamingStrategy.underline_to_camel); 131 strategy.setColumnNaming(NamingStrategy.underline_to_camel); 132 // strategy.setSuperEntityClass("你⾃⼰的⽗类实体,没有就不⽤设置!"); 133 //strategy.setSuperEntityClass("BaseEntity"); 134 strategy.setEntityLombokModel(true); 135 strategy.setRestControllerStyle(true); 136 // 公共⽗类 137 //strategy.setSuperControllerClass("BaseController"); 138 // strategy.setSuperControllerClass("你⾃⼰的⽗类控制器,没有就不⽤设置!"); 139 // 写于⽗类中的公共字段 140 // strategy.setSuperEntityColumns("id"); 141 strategy.setInclude(scanner("表名,多个英⽂逗号分割").split(",")); 142 strategy.setControllerMappingHyphenStyle(true); 143 //strategy.setTablePrefix(pc.getModuleName() + "_"); 144 // 忽略表前缀tb_,⽐如说tb_user,直接映射成user对象 145 // 四、注意是否要去掉表前缀 146 //strategy.setTablePrefix("tb_"); 147 mpg.setStrategy(strategy); 148 mpg.setTemplateEngine(new FreemarkerTemplateEngine()); 149 mpg.execute(); 150 } 151 }
主要就是路径修改与数据库连接,然后依据表名来创建,速度很快,非常适合我这种手残党。
[报错解决](Error Creating bean with name ‘xxx‘)类问题解决思路
我的解决办法是添加
@MapperScan("com.wms.mapper")
然后就能成功启动。