com.baomidou.mybatisplus.generator.AutoGenerator Maven / Gradle / Ivy
Show all versions of mybatis-plus-generate Show documentation
/**
* Copyright (c) 2011-2020, hubin ([email protected]).
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.baomidou.mybatisplus.generator;
import java.io.Serializable;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableLogic;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.annotations.Version;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
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.builder.ConfigBuilder;
import com.baomidou.mybatisplus.generator.config.po.TableField;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import com.baomidou.mybatisplus.toolkit.StringUtils;
/**
* 生成文件
*
* @author YangHu, tangguo, hubin
* @since 2016-08-30
*/
public class AutoGenerator {
private static final Logger logger = LoggerFactory.getLogger(AutoGenerator.class);
/**
* 配置信息
*/
protected ConfigBuilder config;
/**
* 注入配置
*/
protected InjectionConfig injectionConfig;
/**
* 数据源配置
*/
private DataSourceConfig dataSource;
/**
* 数据库表配置
*/
private StrategyConfig strategy;
/**
* 包 相关配置
*/
private PackageConfig packageInfo;
/**
* 模板 相关配置
*/
private TemplateConfig template;
/**
* 全局 相关配置
*/
private GlobalConfig globalConfig;
/**
* 模板引擎
*/
private AbstractTemplateEngine templateEngine;
/**
* 生成代码
*/
public void execute() {
logger.debug("==========================准备生成文件...==========================");
// 初始化配置
if (null == config) {
config = new ConfigBuilder(packageInfo, dataSource, strategy, template, globalConfig);
if (null != injectionConfig) {
injectionConfig.setConfig(config);
}
}
if (null == templateEngine) {
// 为了兼容之前逻辑,采用 Velocity 引擎 【 默认 】
templateEngine = new VelocityTemplateEngine();
}
// 模板引擎初始化执行文件输出
templateEngine.init(this.pretreatmentConfigBuilder(config)).mkdirs().batchOutput().open();
logger.debug("==========================文件生成完成!!!==========================");
}
/**
*
* 开放表信息、预留子类重写
*
*
* @param config 配置信息
* @return
*/
protected List getAllTableInfoList(ConfigBuilder config) {
return config.getTableInfoList();
}
/**
*
* 预处理配置
*
*
* @param config 总配置信息
* @return 解析数据结果集
*/
protected ConfigBuilder pretreatmentConfigBuilder(ConfigBuilder config) {
/**
* 注入自定义配置
*/
if (null != injectionConfig) {
injectionConfig.initMap();
config.setInjectionConfig(injectionConfig);
}
/**
* 表信息列表
*/
List tableList = this.getAllTableInfoList(config);
for (TableInfo tableInfo : tableList) {
/* ---------- 添加导入包 ---------- */
if (config.getGlobalConfig().isActiveRecord()) {
// 开启 ActiveRecord 模式
tableInfo.setImportPackages(Model.class.getCanonicalName());
}
if (tableInfo.isConvert()) {
// 表注解
tableInfo.setImportPackages(TableName.class.getCanonicalName());
}
if (tableInfo.isLogicDelete(config.getStrategyConfig().getLogicDeleteFieldName())) {
// 逻辑删除注解
tableInfo.setImportPackages(TableLogic.class.getCanonicalName());
}
if (StringUtils.isNotEmpty(config.getStrategyConfig().getVersionFieldName())) {
// 乐观锁注解
tableInfo.setImportPackages(Version.class.getCanonicalName());
}
if (StringUtils.isNotEmpty(config.getSuperEntityClass())) {
// 父实体
tableInfo.setImportPackages(config.getSuperEntityClass());
} else {
tableInfo.setImportPackages(Serializable.class.getCanonicalName());
}
// Boolean类型is前缀处理
if (config.getStrategyConfig().isEntityBooleanColumnRemoveIsPrefix()) {
for (TableField field : tableInfo.getFields()) {
if (field.getPropertyType().equalsIgnoreCase("boolean")) {
if (field.getPropertyName().startsWith("is")) {
field.setPropertyName(config.getStrategyConfig(),
StringUtils.removePrefixAfterPrefixToLower(field.getPropertyName(), 2));
}
}
}
}
}
return config.setTableInfoList(tableList);
}
// ================================== 相关配置 ==================================
public DataSourceConfig getDataSource() {
return dataSource;
}
public AutoGenerator setDataSource(DataSourceConfig dataSource) {
this.dataSource = dataSource;
return this;
}
public StrategyConfig getStrategy() {
return strategy;
}
public AutoGenerator setStrategy(StrategyConfig strategy) {
this.strategy = strategy;
return this;
}
public PackageConfig getPackageInfo() {
return packageInfo;
}
public AutoGenerator setPackageInfo(PackageConfig packageInfo) {
this.packageInfo = packageInfo;
return this;
}
public TemplateConfig getTemplate() {
return template;
}
public AutoGenerator setTemplate(TemplateConfig template) {
this.template = template;
return this;
}
public ConfigBuilder getConfig() {
return config;
}
public AutoGenerator setConfig(ConfigBuilder config) {
this.config = config;
return this;
}
public GlobalConfig getGlobalConfig() {
return globalConfig;
}
public AutoGenerator setGlobalConfig(GlobalConfig globalConfig) {
this.globalConfig = globalConfig;
return this;
}
public InjectionConfig getCfg() {
return injectionConfig;
}
public AutoGenerator setCfg(InjectionConfig injectionConfig) {
this.injectionConfig = injectionConfig;
return this;
}
public AbstractTemplateEngine getTemplateEngine() {
return templateEngine;
}
public AutoGenerator setTemplateEngine(AbstractTemplateEngine templateEngine) {
this.templateEngine = templateEngine;
return this;
}
}