package common.jfinal.generate;

import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
import com.jfinal.plugin.activerecord.generator.Generator;
import com.jfinal.plugin.druid.DruidPlugin;
import common.jfinal.AppConfig;
import common.utils.model.MyGenerator;

import javax.sql.DataSource;

public class CodeGenerator {
	// 黑名单表，不参与生成实体
	private static final String[] tableBlackList = {};

	public static DataSource getDataSource() {
		DruidPlugin druidPlugin = AppConfig.getDruidPlugin();
		druidPlugin.start();
		return druidPlugin.getDataSource();
	}

	public static void main(String[] args) {
		// model包
		String modelPackageName = "common.model";
		// baseModel包
		String baseModelPackageName = modelPackageName + ".base";
		// baseModel路径(相对项目)
		String baseModelPath = baseModelPackageName.replace('.', '/');
		// baseModel绝对路径
		String baseModelOutputDir = System.getProperty("user.dir") + "/src/main/java/" + baseModelPath;
		// model绝对路径
		String modelOutputDir = baseModelOutputDir + "/..";
		// 生成器
		Generator gen = MyGenerator.create(getDataSource())
				.setBaseModelPackageName(baseModelPackageName)
				.setBaseModelOutputDir(baseModelOutputDir)
				.setModelPackageName(modelPackageName)
				.setModelOutputDir(modelOutputDir)
				.buildGenerator();
		// 设置数据库方言
		gen.setDialect(new MysqlDialect());
		// 设置字段备注
		gen.setGenerateRemarks(true);
		// 黑名单
		gen.addBlacklist(tableBlackList);
		// 生成dao
		gen.setGenerateDaoInModel(true);
		// 是否生成字典文件
		gen.setGenerateDataDictionary(false);
		// 设置表名前缀
		gen.setRemovedTableNamePrefixes("t_");
		// 生成日志
		gen.setGenerateView(true);
		// 生成model模板
		gen.setBaseModelTemplate("/common/jfinal/generate/base_model_template.jf");
		// 生成
		gen.generate();
	}
}
