官网:https://mp.baomidou.com/guide/generator.html
MyBatis Plus 不仅大大简化了MyBatis开发,还提供了便捷的代码生成器功能,可以自动生Entity、Mapper接口、Mapper映射,甚至是Service和Controller结构。下面演示生成器的基本使用。
(1)导入依赖:
创建一个SpringBoot 2.x工程,包含Web、MySQL、DevTools、Lombok依赖。
让后加入MyBatis Plus的Stater
代码语言:javascript复制 <!-- MyBatis Plus 整合 SpringBoot 的 Starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
和MyBatis Plus生成器的依赖
代码语言:javascript复制 <!-- MyBatis Plus 生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.2.0</version>
</dependency>
<!-- Freemarker模板 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.29</version>
</dependency>
(2)创建代码生成器启动类,配置生成代码的属性,这里以“资源分享网数据库”为例。
代码语言:javascript复制package csdn;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
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.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.FileOutConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
//演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
public class MbpCodeGenerator {
/*读取控制台内容,这里暂不使用*/
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();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath "/src/main/java");
gc.setAuthor("samchen");
gc.setOpen(false);
//gc.setServiceName("%sBiz"); //设置业务接口后缀为Biz,默认Service
//gc.setServiceImplName("%sBizImpl"); //设置业务实现类后缀为BizImpl,默认ServiceImpl
// gc.setSwagger2(true); //是否为实体属性添加 Swagger2 注解
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/csdn?serverTimezone=GMT+8");
// dsc.setSchemaName("public");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("1234");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
//pc.setModuleName(scanner("模块名"));
pc.setParent("csdn"); //设置生成代码的“父级包名”
//pc.setService("biz"); //设置业务包名,默认是service
//pc.setServiceImpl("biz.impl"); //设置业务实现类包名,默认service.impl
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) {
// 自定义mapper xml 文件路径 ,如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return projectPath "/src/main/resources/mapper/"
// pc.getModuleName() //mapper输出目录中加上模块名称,复杂项目才需要
"/" tableInfo.getEntityName() "Mapper" StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel); //表名从下划线转为驼峰
strategy.setColumnNaming(NamingStrategy.underline_to_camel); //字段名从下划线转为驼峰
strategy.setEntityLombokModel(true); //Entity使用Lombok风格格式
strategy.setRestControllerStyle(true); //控制器使用REST风格
//strategy.setTablePrefix("tbl_"); //设置表名前缀,生成代码时会“去除表前缀”
// 设置针对哪些数据库表有效,setExclude()表示排除某些表,setInclude()表示包含某些表
//strategy.setExclude();
// strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
strategy.setControllerMappingHyphenStyle(true);
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}
(3)执行代码生成类,刷新项目目录,会看到自动生成的代码:
(5)附,数据访问配置:
application.yml
代码语言:javascript复制spring:
datasource:
url: jdbc:mysql://localhost:3306/csdn?serverTimezone=GMT+8
username: root
password: 1234
mybatis-plus:
mapper-locations:
- classpath:mapper/*.xml
type-aliases-package: csdn.entity