MyBatis-plus 提供了许多开箱即用的工具,其中就包括了将数据库表映射为实体类的代码生成器。该工具可以便捷快速地生成体现 ORM 思想的 Entity、Mapper 等模块代码,大大提高开发效率
Gradle
compile 'com.baomidou:mybatis-plus-boot-starter:3.4.3.4'
compile 'com.baomidou:mybatis-plus-generator:3.4.1'
compile 'mysql:mysql-connector-java'
compile 'org.apache.velocity:velocity-engine-core:2.3'
Maven
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.4</version>
</dependency>
<!--mybatis-plus代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<!--velocity模板-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
一个快速使用的示例代码如下所示,简单来说主要包含以下几个部分:
public class EntityGenerator {
public static void main(String[] args) {
//1. 全局配置
GlobalConfig config = new GlobalConfig();
config.setAuthor("") // 作者
// 项目模块目录作为生成文件的路径
.setOutputDir(System.getProperty("user.dir") + "/repository/src/main/java")
.setFileOverride(true) // 文件覆盖
.setIdType(IdType.AUTO) // 主键策略
.setServiceName("%sRepositoryService")
.setServiceImplName("%sRepositoryServiceImpl")
.setMapperName("%sMapper")
.setBaseResultMap(true)
.setBaseColumnList(true);
//2. 数据源配置
DataSourceConfig dsConfig = new DataSourceConfig();
dsConfig.setDbType(DbType.MYSQL) // 设置数据库类型
.setDriverName("com.mysql.jdbc.Driver")
// 数据库连接 url,指定数据库名
.setUrl("jdbc:mysql://127.0.0.1:3306/example?useSSL=true&verifyServerCertificate=false&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8" +
"&autoReconnect=true&serverTimezone=UTC&testOnBorrow=true&validationQuery=select 1")
.setUsername("root")
.setPassword("rot");
//3. 策略配置
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setCapitalMode(true) //全局大写命名
// 需要映射为 entity 的库表表名
.setInclude("example".split(","))
// 表前缀,如有,映射生成 entity 时将会去除前缀作为类名
.setTablePrefix("t_")
//是否使用lombok
.setEntityLombokModel(true)
// 数据库表名映射到实体的命名策略
.setNaming(NamingStrategy.underline_to_camel)
// 数据库表字段映射到实体的命名策略
.setColumnNaming(NamingStrategy.underline_to_camel);
//4. 包名策略配置
PackageConfig packageConfig = new PackageConfig();
packageConfig
// 父包名
.setParent("com.nathan")
// 包名
.setModuleName("example")
.setMapper("mapper")
.setService("service")
.setEntity("model.entity");
//5. 模板配置,默认使用 velocity 模版引擎
TemplateConfig templateConfig = new TemplateConfig();
//控制不生成 controller xml
templateConfig.disable(TemplateType.CONTROLLER);
templateConfig.disable(TemplateType.XML);
//6. 整合配置,执行
AutoGenerator mpg = new AutoGenerator();
mpg.setGlobalConfig(config)
.setDataSource(dsConfig)
.setStrategy(strategyConfig)
.setPackageInfo(packageConfig)
.setTemplate(templateConfig);
mpg.execute();
}
}