mybatis-plus3.5.2代码生成器
时间: 2023-05-30 10:03:10 浏览: 222
MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上进行了扩展,提供了更加便捷的CRUD操作、分页、乐观锁、逻辑删除等功能。而MyBatis-Plus的代码生成器则是MyBatis-Plus中的一个子模块,用于生成基于MyBatis-Plus的CRUD代码。
MyBatis-Plus的代码生成器是一个基于Velocity模板引擎的代码生成器,支持生成Java、XML、SQL脚本等文件。使用MyBatis-Plus的代码生成器可以快速生成CRUD代码,减少手动编写代码的工作量。
下面是使用MyBatis-Plus3.5.2代码生成器生成代码的步骤:
1. 添加MyBatis-Plus的依赖
在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.2</version>
</dependency>
```
2. 编写代码生成器配置文件
在src/main/resources目录下创建generator.properties文件,编写代码生成器的配置信息,例如:
```properties
# 数据库配置
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
jdbc.username=root
jdbc.password=root
# 代码生成器配置
outputDir=D:/code-generator
author=MyBatis-Plus
fileOverride=true
openDir=false
```
其中,jdbc.driver、jdbc.url、jdbc.username、jdbc.password是数据库的配置信息,outputDir是生成文件的输出目录,author是代码的作者,fileOverride是是否覆盖已有文件,openDir是是否打开输出目录。
3. 编写代码生成器模板文件
在src/main/resources/templates目录下创建模板文件,例如entity.java.vm、mapper.xml.vm、service.java.vm、serviceImpl.java.vm等,编写模板文件的内容。
模板文件中使用Velocity的语法,可以使用变量、条件语句、循环语句等,例如:
```java
package ${packageName};
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* ${tableComment}
*/
@Data
@TableName("${tableName}")
public class ${entityName} {
#foreach($column in $table.columns)
/**
* ${column.columnComment}
*/
private ${column.javaType} ${column.fieldName};
#end
}
```
在模板文件中,$packageName、$tableComment、$tableName、$entityName、$table.columns等都是变量,会根据生成器配置文件和数据库表的信息动态替换为具体的值。
4. 运行代码生成器
编写好配置文件和模板文件后,就可以运行代码生成器了。在Java代码中使用CodeGenerator类,并传入配置文件和模板文件的路径,即可启动代码生成器,例如:
```java
public class MybatisPlusGenerator {
public static void main(String[] args) {
String configFile = "generator.properties";
String templatePath = "/templates/%s.vm";
AutoGenerator generator = new AutoGenerator();
// 全局配置
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setAuthor(PropertyUtil.getProperty(configFile, "author"));
globalConfig.setFileOverride(Boolean.parseBoolean(PropertyUtil.getProperty(configFile, "fileOverride")));
globalConfig.setOpen(Boolean.parseBoolean(PropertyUtil.getProperty(configFile, "openDir")));
globalConfig.setOutputDir(PropertyUtil.getProperty(configFile, "outputDir"));
generator.setGlobalConfig(globalConfig);
// 数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL);
dataSourceConfig.setDriverName(PropertyUtil.getProperty(configFile, "jdbc.driver"));
dataSourceConfig.setUrl(PropertyUtil.getProperty(configFile, "jdbc.url"));
dataSourceConfig.setUsername(PropertyUtil.getProperty(configFile, "jdbc.username"));
dataSourceConfig.setPassword(PropertyUtil.getProperty(configFile, "jdbc.password"));
generator.setDataSource(dataSourceConfig);
// 包配置
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent(PropertyUtil.getProperty(configFile, "package"));
generator.setPackageInfo(packageConfig);
// 自定义配置
InjectionConfig injectionConfig = new InjectionConfig() {
@Override
public void initMap() {
}
};
injectionConfig.setFileOutConfigList(getFileOutConfigList(templatePath));
generator.setCfg(injectionConfig);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);
generator.setTemplate(templateConfig);
// 策略配置
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setNaming(NamingStrategy.underline_to_camel);
strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
strategyConfig.setEntityLombokModel(true);
strategyConfig.setRestControllerStyle(true);
strategyConfig.setInclude(PropertyUtil.getProperty(configFile, "tableNames").split(","));
generator.setStrategy(strategyConfig);
generator.execute();
}
private static List<FileOutConfig> getFileOutConfigList(String templatePath) {
List<FileOutConfig> fileOutConfigList = new ArrayList<>();
fileOutConfigList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
return String.format("%s/%s%s", PropertyUtil.getProperty("generator.properties", "outputDir"),
tableInfo.getEntityName(), this.getSuffix());
}
});
return fileOutConfigList;
}
}
```
在代码中,使用AutoGenerator类配置全局配置、数据源配置、包配置、自定义配置、模板配置、策略配置等,然后调用execute()方法即可生成代码。
总结:使用MyBatis-Plus的代码生成器可以快速生成基于MyBatis-Plus的CRUD代码,减少手动编写代码的工作量,提高开发效率。需要注意的是,生成的代码只是基础代码,需要根据具体业务进行修改和优化。
阅读全文