在使用jfinal的Generator生成数据库表对应的model的时候,看到此方法:
类MetaBuilder
/**
* 通过继承并覆盖此方法,跳过一些不希望处理的 table,定制更加灵活的 table 过滤规则
* @return 返回 true 时将跳过当前 tableName 的处理
*/
protected boolean isSkipTable(String tableName) {
return false;
}
并不支持通配符也。。。。所以就自己来扩展吧,搞个简单的先凑活着用~
####实现思路为: 实现MyGenerator类,继承Generator,并重写generate()方法。
package com.yunhetong.mq.utils;
import com.jfinal.plugin.activerecord.generator.Generator;
import com.jfinal.plugin.activerecord.generator.MetaBuilder;
import com.jfinal.plugin.c3p0.C3p0Plugin;
import javax.sql.DataSource;
/**
* ModelGenerator
* 修改完表结构后执行一下main方法即可
*/
public class ModelGenerator {
public static DataSource getYHTDataSource() {
String url = "jdbc:mysql://192.168.10.55:3306/yht?useUnicode=true&characterEncoding=UTF-8";
String username = "username";
String password = "password";
C3p0Plugin c3p0Plugin = new C3p0Plugin(url, username, password);
c3p0Plugin.start();
return c3p0Plugin.getDataSource();
}
public static void genYHTModels(){
// base model 所使用的包名
String baseModelPackageName = "com.yunhetong.mq.model.base";
// base model 文件保存路径
String baseModelOutputDir = "D:/Desktop/table" + "/src/main/java/com/yunhetong/mq/model/base";
// model 所使用的包名 (MappingKit 默认使用的包名)
String modelPackageName = "com.yunhetong.model";
// model 文件保存路径 (MappingKit 与 DataDictionary 文件默认保存路径)
String modelOutputDir = "D:/Desktop/table" + "/src/main/java/com/yunhetong/mq/model";
// 创建生成器
Generator gernerator = new Generator(getYHTDataSource(), baseModelPackageName,
baseModelOutputDir, modelPackageName, modelOutputDir);
gernerator.setMetaBuilder(new MyMetaBuilder(getYHTDataSource()));
// 添加不需要生成的表名
gernerator.addExcludedTable("cm_*","um_*","res_*","qrtz_*");
// 设置是否在 Model 中生成 dao 对象
gernerator.setGenerateDaoInModel(true);
// 设置是否生成字典文件
gernerator.setGenerateDataDictionary(true);
// 设置需要被移除的表名前缀用于生成modelName。
//例如表名 "osc_user",移除前缀 "osc_"后生成的model名为 "User"而非 OscUser
// gernerator.setRemovedTableNamePrefixes("cm_","um_","res_","qrtz_");
// 生成
gernerator.generate();
}
public static void main(String[] args) {
genYHTModels();
}
}
class MyMetaBuilder extends MetaBuilder {
public MyMetaBuilder(DataSource dataSource) {
super(dataSource);
}
/**
* 通过继承并覆盖此方法,跳过一些不希望处理的 table,定制更加灵活的 table 过滤规则
* @return 返回 true 时将跳过当前 tableName 的处理
*/
@Override
protected boolean isSkipTable(String tableName) {
if(tableName.contains("bak") || tableName.contains("QRTZ") || tableName.contains("sdk")){
return true;
}else{
return false;
}
}
}