效果:根据数据库表生成controller、entity、mapper、service等文件。
操作步骤:
(1)确保idea连接上数据库
(2)在pom.yml中添加依赖
org.apache.velocity
velocity-engine-core
2.0
com.baomidou
mybatis-plus-generator
3.5.2
org.projectlombok
lombok
com.baomidou
mybatis-plus-boot-starter
3.4.1
com.alibaba
druid
1.0.9
org.junit.jupiter
junit-jupiter-api
mysql
mysql-connector-java
runtime
(3)新建codeGenerator包,在包下建codeGenerator、FastAutoGeneratorTest、H2CodeGeneratorTest三个类
下面为三个类中的代码(来源于官网)
codeGenerator.java
package com.lmc.example;//需修改
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
public class CodeGenerator {
public static void main(String[] args) {
FastAutoGenerator.create(new DataSourceConfig.Builder("jdbc:mysql://192.168.xx.xx:3306/xxx?characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=GMT%2B8",
"root", "123"))//需修改为自己数据库的信息(ip、数据名、账号、密码等)
.globalConfig(builder -> {
builder.author("xxxx") // 设置作者(修改)
.enableSwagger() // 开启 swagger 模式
.outputDir("D:/springboot1/src/main/java/com/example"); // 指定输出目录(修改)
})
.packageConfig(builder -> builder.parent("/test"))//生成代码的上级目录(修改)
.execute();
}
}
FastAutoGeneratorTest.java
package com.lmc.example;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import org.apache.ibatis.jdbc.ScriptRunner;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.SQLException;
public class FastAutoGeneratorTest {
public static void before() throws SQLException {
Connection conn = DATA_SOURCE_CONFIG.build().getConn();
InputStream inputStream = H2CodeGeneratorTest.class.getResourceAsStream("/sql/init.sql");
ScriptRunner scriptRunner = new ScriptRunner(conn);
scriptRunner.setAutoCommit(true);
scriptRunner.runScript(new InputStreamReader(inputStream));
conn.close();
}
private static final DataSourceConfig.Builder DATA_SOURCE_CONFIG = new DataSourceConfig
.Builder("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;CASE_INSENSITIVE_IDENTIFIERS=TRUE;MODE=MYSQL", "sa", "");
public static void main(String[] args) throws SQLException {
before();
FastAutoGenerator.create(DATA_SOURCE_CONFIG)
// 全局配置
.globalConfig((scanner, builder) -> builder.author(scanner.apply("请输入作者名称")))
// 包配置
.packageConfig((scanner, builder) -> builder.parent(scanner.apply("请输入包名")))
// 策略配置
.strategyConfig((scanner, builder) -> builder.addInclude(scanner.apply("请输入表名,多个表名用,隔开")))
.execute();
}
}
H2CodeGeneratorTest.java
package com.lmc.example;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.fill.Property;
import org.apache.ibatis.jdbc.ScriptRunner;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
public class H2CodeGeneratorTest {
@BeforeAll
public static void before() throws SQLException {
Connection conn = DATA_SOURCE_CONFIG.getConn();
InputStream inputStream = H2CodeGeneratorTest.class.getResourceAsStream("/sql/init.sql");
ScriptRunner scriptRunner = new ScriptRunner(conn);
scriptRunner.setAutoCommit(true);
scriptRunner.runScript(new InputStreamReader(inputStream));
conn.close();
}
private static final DataSourceConfig DATA_SOURCE_CONFIG = new DataSourceConfig
.Builder("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;CASE_INSENSITIVE_IDENTIFIERS=TRUE;MODE=MYSQL", "sa", "")
.build();
private StrategyConfig.Builder strategyConfig() {
return new StrategyConfig.Builder().addInclude("t_simple"); // 设置需要生成的表名
}
private GlobalConfig.Builder globalConfig() {
return new GlobalConfig.Builder().fileOverride();
}
private PackageConfig.Builder packageConfig() {
return new PackageConfig.Builder();
}
private TemplateConfig.Builder templateConfig() {
return new TemplateConfig.Builder();
}
private InjectionConfig.Builder injectionConfig() {
// 测试自定义输出文件之前注入操作,该操作再执行生成代码前 debug 查看
return new InjectionConfig.Builder().beforeOutputFile((tableInfo, objectMap) -> {
System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());
});
}
@Test
public void testSimple() {
AutoGenerator generator = new AutoGenerator(DATA_SOURCE_CONFIG);
generator.strategy(strategyConfig().build());
generator.global(globalConfig().build());
generator.execute();
}
@Test
public void testTablePrefix() {
AutoGenerator generator = new AutoGenerator(DATA_SOURCE_CONFIG);
generator.strategy(strategyConfig().addTablePrefix("t_", "c_").build());
generator.global(globalConfig().build());
generator.execute();
}
@Test
public void testFieldSuffix() {
AutoGenerator generator = new AutoGenerator(DATA_SOURCE_CONFIG);
generator.strategy(strategyConfig().addFieldSuffix("_flag").build());
generator.global(globalConfig().build());
generator.execute();
}
@Test
public void testVersionAndFill() {
AutoGenerator generator = new AutoGenerator(DATA_SOURCE_CONFIG);
generator.strategy(strategyConfig().entityBuilder()
.versionColumnName("version") // 基于数据库字段
.versionPropertyName("version")// 基于模型属性
.addTableFills(new Column("create_time", FieldFill.INSERT)) //基于数据库字段填充
.addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE)) //基于模型属性填充
.build());
generator.global(globalConfig().build());
generator.execute();
}
@Test
public void testLogicDeleteAndIgnoreColumn() {
AutoGenerator generator = new AutoGenerator(DATA_SOURCE_CONFIG);
generator.strategy(strategyConfig().entityBuilder()
.logicDeleteColumnName("deleted") // 基于数据库字段
.logicDeletePropertyName("deleteFlag")// 基于模型属性
.addIgnoreColumns("age") // 基于数据库字段
.build());
generator.global(globalConfig().build());
generator.execute();
}
@Test
public void testCustomTemplateName() {
AutoGenerator generator = new AutoGenerator(DATA_SOURCE_CONFIG);
generator.strategy(strategyConfig()
.entityBuilder().formatFileName("%sEntity")
.mapperBuilder().formatMapperFileName("%sDao").formatXmlFileName("%sXml")
.controllerBuilder().formatFileName("%sAction")
.serviceBuilder().formatServiceFileName("%sService").formatServiceImplFileName("%sServiceImp")
.build());
generator.global(globalConfig().build());
generator.execute();
}
@Test
public void testCustomTemplatePath() {
// 设置自定义路径
Map pathInfo = new HashMap<>();
pathInfo.put(OutputFile.xml, "D://");
pathInfo.put(OutputFile.entity, "D://entity//");
AutoGenerator generator = new AutoGenerator(DATA_SOURCE_CONFIG);
generator.strategy(strategyConfig().build());
generator.packageInfo(packageConfig().pathInfo(pathInfo).build());
generator.global(globalConfig().build());
generator.execute();
}
@Test
public void testCustomTemplate() {
AutoGenerator generator = new AutoGenerator(DATA_SOURCE_CONFIG);
generator.strategy(strategyConfig().build());
generator.template(templateConfig()
.entity("/templates/entity1.java")
.build());
generator.global(globalConfig().build());
generator.execute();
}
@Test
public void testCustomMap() {
// 设置自定义属性
Map map = new HashMap<>();
map.put("abc", 123);
AutoGenerator generator = new AutoGenerator(DATA_SOURCE_CONFIG);
generator.strategy(strategyConfig().build());
generator.template(templateConfig()
.entity("/templates/entity1.java")
.build());
generator.injection(injectionConfig().customMap(map).build());
generator.global(globalConfig().build());
generator.execute();
}
@Test
public void testCustomFile() {
// 设置自定义输出文件
Map customFile = new HashMap<>();
customFile.put("test.txt", "/templates/test.vm");
AutoGenerator generator = new AutoGenerator(DATA_SOURCE_CONFIG);
generator.strategy(strategyConfig().build());
generator.injection(injectionConfig().customFile(customFile).build());
generator.global(globalConfig().build());
generator.execute();
}
}
(4)执行CodeGenerator中的这个函数生成
注:代码来自官网



