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<String> 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" });
}
}