描述
通过freemarker模板引擎,mybatis-plus自动生成简单的增删改查三层架构。有两套代码生成器,根据mybatis-plus-generator版本分,其中3.5.1及其以上版本使用新版,以下版本使用旧版
maven依赖
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<!-- mybatis-plus代码生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.2</version>
</dependency>
<!-- freemarker模板引擎 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
旧版-代码生成器
@RunWith(SpringRunner.class)
@SpringBootTest
public class GeneratorTest {
/**
* 表名
*/
private static final String tableName = "system_user,system_menu,system_role,system_role_menu_interface,system_user_role,system_interface";
/**
* 表前缀
*/
private static final String tablePrefix = "system";
/**
* 模块包名,会生成包名,并且会在controller层的url自动添加前缀
*/
private static final String moduleName = "";
/**
* 作者
*/
private static final String author = "苦瓜不苦";
/**
* mysql
*/
private static final String url = "jdbc:mysql://localhost:3306/wheel?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&serverTimezone=GMT%2b8";
private static final String username = "root";
private static final String password = "root";
/**
* 上级包名
*/
private static final String parentPackName = "org.example";
/**
* 自动生成模板
*/
@Test
public void test() {
AutoGenerator generator = new AutoGenerator();
// 全局配置
GlobalConfig global = new GlobalConfig();
String path = System.getProperty("user.dir");
global.setOutputDir(path + "/src/main/java");
global.setAuthor(author);
global.setOpen(false);
global.setIdType(IdType.ASSIGN_ID);
global.setServiceName("%sService");
global.setServiceImplName("%sServiceImpl");
generator.setGlobalConfig(global);
// 数据源配置
DataSourceConfig source = new DataSourceConfig();
source.setUrl(url);
source.setDriverName("com.mysql.cj.jdbc.Driver");
source.setUsername(username);
source.setPassword(password);
generator.setDataSource(source);
// 包配置
PackageConfig pack = new PackageConfig();
pack.setModuleName(moduleName);
pack.setParent(parentPackName);
generator.setPackageInfo(pack);
// 自定义配置
InjectionConfig injection = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
// 模板引擎freemarker
String freemarkerTemplates = "/templates/mapper.xml.ftl";
// 模板引擎velocity
String velocityTemplates = "/templates/repository.xml.vm";
// 自定义输出配置
List<FileOutConfig> fileOutList = new ArrayList<>();
fileOutList.add(new FileOutConfig(freemarkerTemplates) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名,如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return path + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
injection.setFileOutConfigList(fileOutList);
generator.setCfg(injection);
// 模板配置
TemplateConfig template = new TemplateConfig();
template.setXml(null);
generator.setTemplate(template);
// 策略配置,数据库表配置
StrategyConfig strategy = new StrategyConfig();
// 映射到实体类命名策略
strategy.setNaming(NamingStrategy.underline_to_camel);
// 映射到实体字段名命名策略
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// 自定义继承entity类,生成实体类时继承entity
strategy.setSuperEntityClass(ParentModel.class);
// 排除公共实体字段
strategy.setSuperEntityColumns("create_id", "create_name", "create_time", "update_id", "update_name", "update_time");
// 实体是否为lombok模型
strategy.setEntityLombokModel(true);
// 生成@RestController控制器
strategy.setRestControllerStyle(true);
// 表名
strategy.setInclude(tableName.split(","));
// 是否生成实体时,生成字段注解 默认false;
strategy.setEntityTableFieldAnnotationEnable(true);
// 驼峰转连字符
strategy.setControllerMappingHyphenStyle(true);
// 表前缀
// strategy.setTablePrefix(tablePrefix);
generator.setStrategy(strategy);
// 在代码生成器主类上配置模板引擎
generator.setTemplateEngine(new FreemarkerTemplateEngine());
//生成
generator.execute();
}
}
新版-代码生成器
/**
* @author: 苦瓜不苦
* @date: 2022/6/18 17:14
**/
public class GeneratorTest {
private final static String url = "jdbc:mysql://127.0.0.1:3306/blogger?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&serverTimezone=GMT%2b8";
private final static String username = "root";
private final static String password = "root";
private final static String[] tableList = {"tb_role_path"};
private final static String parentPack = "org.example";
@Test
void test() {
String property = System.getProperty("user.dir");
FastAutoGenerator.create(url, username, password)
.globalConfig(builder -> {
builder.author("苦瓜不苦") // 设置作者
.disableOpenDir() // 关闭自动开发文件资源管理
.fileOverride() // 覆盖已生成文件
.outputDir(property + "/src/main/java") // 指定输出目录
.build();
})
.packageConfig(builder -> {
builder.parent(parentPack) // 设置父包名
//.moduleName("") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.xml, property + "/src/main/resources/mapper/")) // 设置mapperXml生成路径
.build();
})
.strategyConfig(builder -> {
builder.addInclude(tableList) // 设置需要生成的表名
.addTablePrefix("tb_") // 设置过滤表前缀
.build()
.entityBuilder() // entity
.superClass(ParentModel.class)
.enableLombok()
.enableTableFieldAnnotation()
.addIgnoreColumns("update_time", "update_id", "update_name", "create_time", "create_id", "create_name")
.idType(IdType.ASSIGN_ID)
.build()
.controllerBuilder() // controller
.enableRestStyle()
.mapperBuilder() // mapper
.enableMapperAnnotation()
.build()
.serviceBuilder() // service
.formatServiceFileName("%sService")
.formatServiceImplFileName("%sServiceImp")
.build();
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
}