JFinal Generator 自动生成 和 生成指定表名的 model

 

package com.archser.archser.generator;

import javax.sql.DataSource;

import com.jfinal.kit.PathKit;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.dialect.OracleDialect;
import com.jfinal.plugin.activerecord.generator.Generator;
import com.jfinal.plugin.druid.DruidPlugin;

/**
 * 
 * @ClassName: MyGenerator
 * @Description:TODO(自动生成Model)
 * @author: 李德才
 * @date: 2020年3月13日 下午5:15:30
 */
public class MyGenerator extends Generator {

	/**
	 * 
	 * @param dataSource
	 * @param baseModelPackageName
	 * @param baseModelOutputDir
	 * @param modelPackageName
	 * @param modelOutputDir
	 */
	public MyGenerator(DataSource dataSource, String baseModelPackageName, String baseModelOutputDir,
			String modelPackageName, String modelOutputDir) {
		super(dataSource, baseModelPackageName, baseModelOutputDir, modelPackageName, modelOutputDir);
	}

	/**
	 * 
	 * @Description: TODO(自动生成Model) 
	 * @auto:李德才 
	 * @param: @param args 
	 * @return: void 
	 * @throws
	 */
	public static void main(String[] args) {
		PropKit.use("AppConfig.properties");
		String url = PropKit.get("jdbc.url");
		String username = PropKit.get("jdbc.username");
		String password = PropKit.get("jdbc.password");
		String driverClass = PropKit.get("jdbc.driver");

		DruidPlugin dbPlugin = new DruidPlugin(url, username, password, driverClass);
		dbPlugin.start();
		// base model 所使用的包名
		String baseModelPackageName = "com.archser.archser.model.base";
		// base model 文件保存路径
		String baseModelOutputDir = PathKit.getWebRootPath() + "src/main/java/com/archser/archser/model/base";
		// model 所使用的包名
		String modelPackageName = "com.archser.archser.model";
		// model 文件保存路径
		String modelOutputDir = baseModelOutputDir + "src/main/java/com/archser/archser/model";

		Generator generator = new Generator(dbPlugin.getDataSource(), baseModelPackageName, baseModelOutputDir,
				modelPackageName, modelOutputDir);

		// 配置是否生成备注
		generator.setGenerateRemarks(true);
		// 设置是否在 Model 中生成 dao 对象
		generator.setGenerateDaoInModel(true);
		// 设置是否生成链式 setter 方法
		generator.setGenerateChainSetter(false);
		// 配置方言
		generator.setDialect(new OracleDialect());
		// 设置是否生成字典文件
		generator.setGenerateDataDictionary(false);
		// 设置需要被移除的表名前缀用于生成modelName。例如表名 "AS_user",移除前缀 "AS_"后生成的model名为 "User"而非
		// AsUser
		generator.setRemovedTableNamePrefixes("AS_");
		// 自定义生成表的规则
		generator.setMetaBuilder(new MyMetaBuilder(dbPlugin.getDataSource()));
		// 开始生成
		generator.generate();
	}
}

 自定义的类,继承JFinal 的 MetaBuilder 并重写JFinal 作者给我们留下的方法

package com.archser.archser.generator;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.sql.DataSource;
import com.jfinal.plugin.activerecord.dialect.OracleDialect;
import com.jfinal.plugin.activerecord.generator.MetaBuilder;

/**
 * 
 * @ClassName: MyMetaBuilder
 * @Description:TODO(过滤不需要生成的表)
 * @author: 李德才
 * @date: 2020年3月13日 下午5:14:52
 */

public class MyMetaBuilder extends MetaBuilder {

	public MyMetaBuilder(DataSource dataSource) {
		super(dataSource);
	}

	@Override
	protected boolean isSkipTable(String tableName) {

		// 不以 AS_ 开头,过滤
		if (!tableName.startsWith("AS_")) {
			return true;
		}

//    不生成的表
		String tableNames = "";
		List tableList = Arrays.asList(tableNames.split(","));

//    过滤指定表名
		if (tableList.contains(tableName)) {
			return true;
		}

//	    非法字符
		String IllegalCharacters = "$,#";
		String[] characterList = IllegalCharacters.split(",");

//    过滤特殊字符
		for (String character : characterList) {
			if (tableName.contains(character)) {
				return true;
			}
		}

//    过滤含有数字的表
		if (isHaveNumber(tableName)) {
			return true;
		}

		return false;
	}

	/**
	 * 
	 * @Description: TODO(判断字符串中是否含有数字) @auto:李德才 @param: @param
	 *               content @param: @return @return: boolean @throws
	 */
	private boolean isHaveNumber(String content) {
		boolean flag = false;
		Pattern pattern = Pattern.compile(".*\\d+.*");
		Matcher matcher = pattern.matcher(content);
		if (matcher.matches()) {
			flag = true;
		}
		return flag;
	}

	@Override
	protected ResultSet getTablesResultSet() throws SQLException {
		String schemaPattern = dialect instanceof OracleDialect ? dbMeta.getUserName() : null;
		schemaPattern = null; // 如果是Oracle ,将此行注释
		return dbMeta.getTables(conn.getCatalog(), schemaPattern, "%", new String[] { "TABLE" });
	}

}

 

你可能感兴趣的:(JFinal)