项目原始目录
必备依赖
用于连接数据库后根据模板生成文件
com.baomidou mybatis-plus 3.0.6org.springframework.boot spring-boot-starter-freemarker mysql mysql-connector-java 5.1.25
生成文件代码,其中几个重要的点在其他地方比较难找的:
- 转换类型,默认使用localdatetime,进行转换为常用的Date,tinyint转换为Boolean类型
//tinyint转换成Boolean if ( fieldType.toLowerCase().contains( "tinyint" ) ) { return DbColumnType.BOOLEAN; } //将数据库中datetime转换成date,防止出现自动生成代码LocalDateTime if ( fieldType.toLowerCase().contains( "datetime" ) ) { return DbColumnType.DATE; }
- 可以自定义生成文件,比如form实体类和VO实体类
List focList = new ArrayList<>();// 自定义生成文件 focList.add(new FileOutConfig("/templates/entityForm.java.ftl") { @Override public String outputFile(TableInfo tableInfo) { // 自定义输入文件名称 comspringbootplatformentityform return "D:springmybatisplussrcmainjavacompeabodymybatisplusentityform" + tableInfo.getEntityName()+"Form" + StringPool.DOT_JAVA; } });
整体配置代码如下:
package com.peabody.mybatisplus.generate;import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;import com.baomidou.mybatisplus.core.toolkit.StringPool;import com.baomidou.mybatisplus.core.toolkit.StringUtils;import com.baomidou.mybatisplus.generator.AutoGenerator;import com.baomidou.mybatisplus.generator.InjectionConfig;import com.baomidou.mybatisplus.generator.config.*;import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;import com.baomidou.mybatisplus.generator.config.po.TableInfo;import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class mpgenerate { public static String scanner(String tip) { Scanner scanner = new Scanner(System.in); StringBuilder help = new StringBuilder(); help.append("请输入" + tip + ":"); System.out.println(help.toString()); if (scanner.hasNext()) { String ipt = scanner.next(); if (StringUtils.isNotEmpty(ipt)) { return ipt; } } throw new MybatisPlusException("请输入正确的" + tip + "!"); } public static void main(String[] args) { // 代码生成器 AutoGenerator mpg = new AutoGenerator(); // 选择 freemarker 引擎,默认 Veloctiy mpg.setTemplateEngine(new FreemarkerTemplateEngine()); // 配置模板 TemplateConfig templateConfig = new TemplateConfig(); templateConfig.setXml(null); mpg.setTemplate(templateConfig); // 全局配置 GlobalConfig gc = new GlobalConfig(); gc.setOutputDir("D:springmybatisplussrcmainjava");//生成文件的输出目录 gc.setAuthor("peabody");//作者 gc.setFileOverride(true);//是否覆蓋已有文件 默认值:false gc.setOpen(false);//是否打开输出目录 默认值:true gc.setSwagger2(true);//开启 swagger2 模式 默认false gc.setBaseColumnList(true);//开启 baseColumnList 默认false gc.setBaseResultMap(true);//开启 BaseResultMap 默认false gc.setEntityName("%s");//实体命名方式 默认值:null 例如:%sEntity 生成 UserEntity gc.setMapperName("%sMapper");//mapper 命名方式 默认值:null 例如:%sDao 生成 UserDao //Mapper xml 命名方式 默认值:null 例如:%sDao 生成 UserDao.xml gc.setServiceName("I%sService");//service 命名方式 默认值:null 例如:%sBusiness 生成 UserBusiness gc.setServiceImplName("%sService");//service impl 命名方式 默认值:null 例如:%sBusinessImpl 生成 UserBusinessImpl gc.setControllerName("%sController");//controller 命名方式 默认值:null 例如:%sAction 生成 UserAction mpg.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setDbType(DbType.MYSQL);//数据库类型该类内置了常用的数据库类型【必须】 dsc.setUrl("jdbc:mysql://127.0.0.1:3306/peapeay?useUnicode=true&useSSL=false&characterEncoding=utf8"); // dsc.setSchemaName("public"); dsc.setDriverName("com.mysql.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("peabody"); dsc.setTypeConvert(new MySqlTypeConvert() { @Override public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) { System.out.println("转换类型:" + fieldType); //tinyint转换成Boolean if ( fieldType.toLowerCase().contains( "tinyint" ) ) { return DbColumnType.BOOLEAN; } //将数据库中datetime转换成date,防止出现自动生成代码LocalDateTime if ( fieldType.toLowerCase().contains( "datetime" ) ) { return DbColumnType.DATE; } return (DbColumnType) super.processTypeConvert(globalConfig, fieldType); } }); mpg.setDataSource(dsc); // 包配置 PackageConfig pc = new PackageConfig();// pc.setModuleName(scanner("模块名")); pc.setParent("com.peabody.mybatisplus"); pc.setEntity("entity.po"); pc.setMapper("dao"); pc.setController("rest"); pc.setService("service"); pc.setServiceImpl("service.impl"); mpg.setPackageInfo(pc); // 自定义配置gateway_ignore InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() {//注入自定义 Map 对象 //自定义动作 } }; List focList = new ArrayList<>();// 自定义生成文件 focList.add(new FileOutConfig("/templates/entityForm.java.ftl") { @Override public String outputFile(TableInfo tableInfo) { // 自定义输入文件名称 comspringbootplatformentityform return "D:springmybatisplussrcmainjavacompeabodymybatisplusentityform" + tableInfo.getEntityName()+"Form" + StringPool.DOT_JAVA; } }); cfg.setFileOutConfigList(focList); mpg.setCfg(cfg); mpg.setTemplate(new TemplateConfig().setXml(null)); // 策略配置数据库表配置,通过该配置,可指定需要生成哪些表或者排除哪些表 StrategyConfig strategy = new StrategyConfig(); strategy.setNaming(NamingStrategy.underline_to_camel);//表名生成策略 strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略, 未指定按照 naming 执行// strategy.setCapitalMode(true);// 全局大写命名 ORACLE 注意// strategy.setTablePrefix("prefix");//表前缀// strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity");//自定义继承的Entity类全称,带包名// strategy.setSuperEntityColumns(new String[] { "test_id", "age" }); //自定义实体,公共字段 strategy.setEntityLombokModel(true);//【实体】是否为lombok模型(默认 false strategy.setRestControllerStyle(true);//生成 @RestController 控制器// strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController");//自定义继承的Controller类全称,带包名 strategy.setInclude(scanner("table_name"));//需要包含的表名,允许正则表达式(与exclude二选一配置)// strategy.setInclude(new String[] { "user" }); // 需要生成的表可以多张表// strategy.setExclude(new String[]{"test"}); // 排除生成的表 strategy.setControllerMappingHyphenStyle(true);//驼峰转连字符 strategy.setTablePrefix(pc.getModuleName() + "_");//是否生成实体时,生成字段注解 mpg.setStrategy(strategy); mpg.setTemplateEngine(new FreemarkerTemplateEngine()); mpg.execute(); } }
欧克,起飞了
当然ftl可以自定义,不一定适配我的模板,输入表格名称后生成文件
执行结果
执行后生成的文件列表
生成文件
ftl模板可以去mybatisplus官网GitHub上下载,内容太多不在此贴出来了