具体的可参考官方文档https://baomidou.com/guide/quick-start.html
先创建启动生成xml、mapper以及数据库对象
import com.baomidou.mybatisplus.core.toolkit.StringPool; 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.TableField; import com.baomidou.mybatisplus.generator.config.po.TableInfo; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; import java.util.ArrayList; import java.util.List; public class MyBatisGenerator { boolean useGenerator = true; //具体的表,.*代表数据库中的全部表 String[] tableNames = { ".*" }; String databaseUrl = "jdbc:mysql://qrd1.aitekapp.com:45671/music-share?useUnicode=true&characterEncoding=UTF-8&useSSL=false"; String user = "root"; String password = "zqzn8888"; String projectPath = "."; // @Test public void testGenerator() { if(!useGenerator) { return; } // 代码生成器 AutoGenerator mpg = new AutoGenerator(); GlobalConfig gc = new GlobalConfig(); gc.setOutputDir(projectPath + "/src/main/java"); gc.setAuthor("zhangpengfei"); gc.setOpen(false); gc.setBaseResultMap(true); gc.setBaseColumnList(true); //gc.setControllerName("SSSSScontroller"); // 是否覆盖已有文件 gc.setFileOverride(true); mpg.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl(databaseUrl); // dsc.setSchemaName("public"); dsc.setDriverName("com.mysql.jdbc.Driver"); dsc.setUsername(user); dsc.setPassword(password); mpg.setDataSource(dsc); // 包配置 PackageConfig pc = new PackageConfig(); //pc.setModuleName(scanner("模块名")); pc.setParent(null); // 这个地址是生成的配置文件的包路径 pc.setEntity("com.aitek.ai.music.share.dal.model"); pc.setMapper("com.aitek.ai.music.share.dal.mapper"); mpg.setPackageInfo(pc); // 自定义配置 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { // to do nothing } }; // 如果模板引擎是 freemarker String templatePath = "/templates/mapper.xml.ftl"; // 自定义输出配置 List<FileOutConfig> focList = new ArrayList<>(); // 自定义配置会被优先输出 focList.add(new FileOutConfig(templatePath) { @Override public String outputFile(TableInfo tableInfo) { // 自定义输出文件名 return projectPath + "/src/main/resources/mapper" + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; } }); cfg.setFileOutConfigList(focList); mpg.setCfg(cfg); // 配置模板 TemplateConfig templateConfig = new TemplateConfig(); // //配置自定义输出模板 // 不需要其他的类型时,直接设置为null就不会成对应的模版了 //templateConfig.setEntity("..."); templateConfig.setService(null); templateConfig.setController(null); templateConfig.setServiceImpl(null); templateConfig.setXml(null); mpg.setTemplate(templateConfig); // 策略配置 StrategyConfig strategy = new StrategyConfig(); MyNameConvert convert = new MyNameConvert(NamingStrategy.underline_to_camel, strategy); strategy.setNameConvert(convert); strategy.setNaming(NamingStrategy.underline_to_camel); strategy.setColumnNaming(NamingStrategy.underline_to_camel); //strategy.setSuperEntityClass("com.cikers.ps.model.BaseEntity"); //strategy.setSuperMapperClass("com.cikers.ps.time.IMapper"); strategy.setEntityLombokModel(false); //strategy.setRestControllerStyle(false); //strategy.setSuperControllerClass("com.cikers.ps.controller.MysqlController"); strategy.setInclude(tableNames); // 设置继承的父类字段 //strategy.setSuperEntityColumns("id","modifiedBy","modifiedOn","createdBy","createdOn"); //strategy.setControllerMappingHyphenStyle(true); //strategy.setTablePrefix(pc.getModuleName() + "_"); mpg.setStrategy(strategy); mpg.setTemplateEngine(new FreemarkerTemplateEngine()); mpg.execute(); } } class MyNameConvert implements INameConvert { private NamingStrategy strategy; private StrategyConfig config; public MyNameConvert(NamingStrategy strategy, StrategyConfig config) { this.strategy = strategy; this.config = config; } @Override public String entityNameConvert(TableInfo tableInfo) { String[] tablePrefix = config.getTablePrefix(); String name = NamingStrategy.capitalFirst(processName(tableInfo.getName(), strategy, tablePrefix)); if(name.endsWith("s") && name.length() > 2) { name = name.substring(0, name.length()-1); tableInfo.setConvert(true); } return name; } @Override public String propertyNameConvert(TableField field) { String name = NamingStrategy.underlineToCamel(field.getName()); if(name.endsWith("id") && name.length() > 2) { name = name.substring(0, name.length()-2) + "Id"; } field.setConvert(true); return name; } private String processName(String name, NamingStrategy strategy, String[] prefix) { boolean removePrefix = false; if (prefix != null && prefix.length != 0) { removePrefix = true; } String propertyName; if (removePrefix) { if (strategy == NamingStrategy.underline_to_camel) { // 删除前缀、下划线转驼峰 propertyName = NamingStrategy.removePrefixAndCamel(name, prefix); } else { // 删除前缀 propertyName = NamingStrategy.removePrefix(name, prefix); } } else if (strategy == NamingStrategy.underline_to_camel) { // 下划线转驼峰 propertyName = NamingStrategy.underlineToCamel(name); } else { // 不处理 propertyName = name; } return propertyName; } }
pom中引入如下包:
</properties>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.2.0</version>
<scope>test</scope>
</dependency>
<!-- freemarker 模板引擎 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>