本文共 5084 字,大约阅读时间需要 16 分钟。
1、引入依赖
com.baomidou mybatis-plus-boot-starter 3.1.0 com.baomidou mybatis-plus-extension 3.1.0 com.baomidou mybatis-plus-generator 3.1.2 org.freemarker freemarker 2.3.30
2、编写工具类
import com.baomidou.mybatisplus.annotation.IdType;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.po.TableInfo;import com.baomidou.mybatisplus.generator.config.rules.DateType;import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;import java.util.ArrayList;import java.util.List;/** * @Author Minco * @Date 10:55 2020-09-02 * @Description MpGeneratorUtils */public class MpGeneratorUtils { public static void executeCode(String pack,String project,String dbUrl, String dbDriverName,String dbUsername, String dbPassword, String[] tables, String[] tablePrefixs) { // 代码生成器 AutoGenerator mpg = new AutoGenerator(); // 全局配置 GlobalConfig gc = new GlobalConfig(); // 是否覆盖已有文件 gc.setFileOverride(false); // 生成文件的输出目录 String projectPath = System.getProperty("user.dir") +project;//user.dir 表示当前工程路径无需替换 gc.setOutputDir(projectPath +"/src/main/java"); //设置bean命名规范 gc.setEntityName("%s"); // 开发人员 gc.setAuthor("Minco"); // 是否打开输出目录 gc.setOpen(false); // 开启 BaseResultMap gc.setBaseResultMap(true); // 指定生成的主键的ID类型 gc.setIdType(IdType.ID_WORKER); // 时间类型对应策略: 只使用 java.util.date 代替 gc.setDateType(DateType.ONLY_DATE); mpg.setGlobalConfig(gc); // 数据源配置 DataSourceConfig config = new DataSourceConfig(); // 从试图获取 config.setUrl(dbUrl); config.setDriverName(dbDriverName); config.setUsername(dbUsername); config.setPassword(dbPassword); mpg.setDataSource(config); // 包配置 PackageConfig pc = new PackageConfig(); // 父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名 pc.setParent(pack); // Entity包名 pc.setEntity("domain"); mpg.setPackageInfo(pc); // 自定义配置 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { // to do nothing } }; ListfocList = new ArrayList<>(); focList.add(new FileOutConfig("/templates/mapper.xml.ftl") { public String outputFile(TableInfo tableInfo) { // 自定义输入文件名称 if (StringUtils.isEmpty(pc.getModuleName())) { return projectPath + "/src/main/resources/mappers/" + tableInfo.getXmlName() + StringPool.DOT_XML; } else { return projectPath + "/src/main/resources/mappers/" + pc.getModuleName() + "/" + tableInfo.getXmlName() + StringPool.DOT_XML; } } }); 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); // 【实体】是否为lombok模型(默认 false) strategy.setEntityLombokModel(true); // 需要包含的表名,允许正则表达式(与exclude二选一配置) strategy.setInclude(tables); // 驼峰转连字符 strategy.setControllerMappingHyphenStyle(true); // 表前缀 strategy.setTablePrefix(tablePrefixs); mpg.setStrategy(strategy); mpg.setTemplateEngine(new FreemarkerTemplateEngine()); mpg.execute(); }}
3、直接main方法运行生成代码
public static void main(String[] args) { String project="/XXX"; //多模块项目所以把项目名的路径也带上了,单模块给个空引号 String packageName = "com.XXX.XXX"; //完整包名 String dbUrl="jdbc:mysql://127.0.0.1:3306/e3_test?useUnicode=true&characterEncoding=UTF8&allowMultiQueries=true&useSSL=false&serverTimezone=UTC"; String dbDriverName="com.mysql.cj.jdbc.Driver"; String dbUsername="root"; String dbPassword="XXXX"; String[] tables = new String[]{"order_return_goods","order_return","order_info","order_goods"};//表名数组 String[] tablePrefixs = new String[]{""};//去掉前缀 MpGeneratorUtils.executeCode(packageName, project,dbUrl,dbDriverName,dbUsername,dbPassword,tables, tablePrefixs); }
4、生成的代码展示
转载地址:http://ynnab.baihongyu.com/