MyBatis-Plus is an enhanced toolkit for MyBatis providing CRUD operations, query wrappers, pagination, code generation, and Spring Boot integration.
—
MyBatis-Plus provides a powerful code generator that automatically creates entity classes, mapper interfaces, service classes, and controller classes from database schemas with extensive customization options and multiple template engine support.
Main code generator class that orchestrates the generation process.
/**
* Automatic code generator
*/
public class AutoGenerator {
/**
* Execute code generation
*/
public void execute();
/**
* Set global configuration
* @param globalConfig Global configuration
* @return AutoGenerator instance
*/
public AutoGenerator setGlobalConfig(GlobalConfig globalConfig);
/**
* Set data source configuration
* @param dataSourceConfig Data source configuration
* @return AutoGenerator instance
*/
public AutoGenerator setDataSourceConfig(DataSourceConfig dataSourceConfig);
/**
* Set package configuration
* @param packageConfig Package configuration
* @return AutoGenerator instance
*/
public AutoGenerator setPackageConfig(PackageConfig packageConfig);
/**
* Set strategy configuration
* @param strategyConfig Strategy configuration
* @return AutoGenerator instance
*/
public AutoGenerator setStrategyConfig(StrategyConfig strategyConfig);
/**
* Set template configuration
* @param templateConfig Template configuration
* @return AutoGenerator instance
*/
public AutoGenerator setTemplateConfig(TemplateConfig templateConfig);
/**
* Set injection configuration
* @param injectionConfig Injection configuration
* @return AutoGenerator instance
*/
public AutoGenerator setInjectionConfig(InjectionConfig injectionConfig);
}Global configuration for output directory, author, and generation options.
/**
* Global configuration
*/
public class GlobalConfig {
/**
* Set output directory
* @param outputDir Output directory path
* @return GlobalConfig instance
*/
public GlobalConfig setOutputDir(String outputDir);
/**
* Set whether to override existing files
* @param fileOverride Override flag
* @return GlobalConfig instance
*/
public GlobalConfig setFileOverride(boolean fileOverride);
/**
* Set whether to open output directory after generation
* @param open Open flag
* @return GlobalConfig instance
*/
public GlobalConfig setOpen(boolean open);
/**
* Set author name
* @param author Author name
* @return GlobalConfig instance
*/
public GlobalConfig setAuthor(String author);
/**
* Set whether to enable Kotlin code generation
* @param enableKotlin Kotlin flag
* @return GlobalConfig instance
*/
public GlobalConfig setEnableKotlin(boolean enableKotlin);
/**
* Set whether to enable Swagger annotations
* @param swagger Swagger flag
* @return GlobalConfig instance
*/
public GlobalConfig setSwagger(boolean swagger);
/**
* Set date type strategy
* @param dateType Date type
* @return GlobalConfig instance
*/
public GlobalConfig setDateType(DateType dateType);
/**
* Set comment date format
* @param commentDate Comment date format
* @return GlobalConfig instance
*/
public GlobalConfig setCommentDate(String commentDate);
}Database connection configuration.
/**
* Data source configuration
*/
public class DataSourceConfig {
/**
* Set database URL
* @param url Database URL
* @return DataSourceConfig instance
*/
public DataSourceConfig setUrl(String url);
/**
* Set database driver class name
* @param driverName Driver class name
* @return DataSourceConfig instance
*/
public DataSourceConfig setDriverName(String driverName);
/**
* Set database username
* @param username Username
* @return DataSourceConfig instance
*/
public DataSourceConfig setUsername(String username);
/**
* Set database password
* @param password Password
* @return DataSourceConfig instance
*/
public DataSourceConfig setPassword(String password);
/**
* Set schema name
* @param schemaName Schema name
* @return DataSourceConfig instance
*/
public DataSourceConfig setSchemaName(String schemaName);
/**
* Set database type
* @param dbType Database type
* @return DataSourceConfig instance
*/
public DataSourceConfig setDbType(DbType dbType);
}Package structure configuration for generated classes.
/**
* Package configuration
*/
public class PackageConfig {
/**
* Set parent package name
* @param parent Parent package
* @return PackageConfig instance
*/
public PackageConfig setParent(String parent);
/**
* Set module name
* @param moduleName Module name
* @return PackageConfig instance
*/
public PackageConfig setModuleName(String moduleName);
/**
* Set entity package name
* @param entity Entity package
* @return PackageConfig instance
*/
public PackageConfig setEntity(String entity);
/**
* Set service package name
* @param service Service package
* @return PackageConfig instance
*/
public PackageConfig setService(String service);
/**
* Set service implementation package name
* @param serviceImpl Service implementation package
* @return PackageConfig instance
*/
public PackageConfig setServiceImpl(String serviceImpl);
/**
* Set mapper package name
* @param mapper Mapper package
* @return PackageConfig instance
*/
public PackageConfig setMapper(String mapper);
/**
* Set XML package name
* @param xml XML package
* @return PackageConfig instance
*/
public PackageConfig setXml(String xml);
/**
* Set controller package name
* @param controller Controller package
* @return PackageConfig instance
*/
public PackageConfig setController(String controller);
/**
* Set path info for custom paths
* @param pathInfo Path information map
* @return PackageConfig instance
*/
public PackageConfig setPathInfo(Map<String, String> pathInfo);
}Basic Code Generation:
// Basic setup
AutoGenerator generator = new AutoGenerator();
// Global config
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java")
.setAuthor("MyBatis-Plus Generator")
.setFileOverride(true)
.setOpen(false)
.setSwagger(true);
// Data source config
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8")
.setDriverName("com.mysql.cj.jdbc.Driver")
.setUsername("root")
.setPassword("password");
// Package config
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.example")
.setModuleName("demo")
.setEntity("entity")
.setMapper("mapper")
.setService("service")
.setServiceImpl("service.impl")
.setController("controller");
// Strategy config
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setInclude("user", "department") // Tables to generate
.setNaming(NamingStrategy.underline_to_camel)
.setColumnNaming(NamingStrategy.underline_to_camel)
.setEntityLombokModel(true)
.setRestControllerStyle(true)
.setControllerMappingHyphenStyle(true);
// Execute generation
generator.setGlobalConfig(globalConfig)
.setDataSourceConfig(dataSourceConfig)
.setPackageConfig(packageConfig)
.setStrategyConfig(strategyConfig)
.execute();Advanced Configuration:
AutoGenerator generator = new AutoGenerator();
// Global config with advanced options
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setOutputDir("/path/to/output")
.setAuthor("Your Name")
.setFileOverride(true)
.setOpen(false)
.setEnableKotlin(false)
.setSwagger(true)
.setDateType(DateType.TIME_PACK)
.setCommentDate("yyyy-MM-dd HH:mm:ss");
// Strategy config with table and field settings
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setInclude("sys_user", "sys_role", "sys_permission")
.setExclude("temp_table")
.setNaming(NamingStrategy.underline_to_camel)
.setColumnNaming(NamingStrategy.underline_to_camel)
.setTablePrefix("sys_")
.setFieldPrefix("f_")
.setEntityLombokModel(true)
.setEntityTableFieldAnnotationEnable(true)
.setEntityBooleanColumnRemoveIsPrefix(true)
.setRestControllerStyle(true)
.setControllerMappingHyphenStyle(true)
.setEntitySerialVersionUID(true)
.setEntityColumnConstant(true)
.setChainModel(true);
// Template config to customize generated files
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setEntity("/templates/entity.java.vm")
.setMapper("/templates/mapper.java.vm")
.setService("/templates/service.java.vm")
.setServiceImpl("/templates/serviceImpl.java.vm")
.setController("/templates/controller.java.vm")
.setXml("/templates/mapper.xml.vm");
generator.setGlobalConfig(globalConfig)
.setDataSourceConfig(dataSourceConfig)
.setPackageConfig(packageConfig)
.setStrategyConfig(strategyConfig)
.setTemplateConfig(templateConfig)
.execute();Custom Templates with Injection:
// Custom injection config
InjectionConfig injectionConfig = new InjectionConfig() {
@Override
public void initMap() {
Map<String, Object> map = new HashMap<>();
map.put("projectName", "MyProject");
map.put("basePackage", "com.example.demo");
map.put("author", "Generator");
map.put("version", "1.0.0");
this.setMap(map);
}
};
// Custom file output configs
List<FileOutConfig> focList = new ArrayList<>();
// Generate DTO classes
focList.add(new FileOutConfig("/templates/dto.java.vm") {
@Override
public String outputFile(TableInfo tableInfo) {
return "/path/to/dto/" + tableInfo.getEntityName() + "DTO.java";
}
});
// Generate VO classes
focList.add(new FileOutConfig("/templates/vo.java.vm") {
@Override
public String outputFile(TableInfo tableInfo) {
return "/path/to/vo/" + tableInfo.getEntityName() + "VO.java";
}
});
injectionConfig.setFileOutConfigList(focList);
generator.setInjectionConfig(injectionConfig);Multiple Template Engines:
// Using Velocity (default)
generator.setTemplateEngine(new VelocityTemplateEngine());
// Using Freemarker
generator.setTemplateEngine(new FreemarkerTemplateEngine());
// Using Beetl
generator.setTemplateEngine(new BeetlTemplateEngine());
// Using Enjoy
generator.setTemplateEngine(new EnjoyTemplateEngine());Generated Code Examples:
Entity class generated:
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sys_user")
@ApiModel(value="User对象", description="用户表")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键ID")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "用户名")
@TableField("username")
private String username;
@ApiModelProperty(value = "密码")
@TableField("password")
private String password;
@ApiModelProperty(value = "邮箱")
@TableField("email")
private String email;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private LocalDateTime createTime;
@ApiModelProperty(value = "更新时间")
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}Service interface generated:
public interface UserService extends IService<User> {
}Service implementation generated:
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}Mapper interface generated:
public interface UserMapper extends BaseMapper<User> {
}Controller generated:
@RestController
@RequestMapping("/user")
@Api(tags = "用户管理")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/list")
@ApiOperation("获取用户列表")
public R<List<User>> list() {
return R.ok(userService.list());
}
@PostMapping("/save")
@ApiOperation("保存用户")
public R<Boolean> save(@RequestBody User user) {
return R.ok(userService.save(user));
}
// ... other CRUD methods
}This code generation system dramatically accelerates development by automatically creating boilerplate code while maintaining customization flexibility through templates and configuration options.
Install with Tessl CLI
npx tessl i tessl/maven-com-baomidou--mybatis-plus