@Fancy-Bai
2017-04-11T21:34:49.000000Z
字数 1899
阅读 1914
JFinal
JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!
JFinal 在使用Generator自动生成JavaBean类的时候,提供了以下方法:
但是并没有提供如果只想生成某些特定表的情况,还好JFinal提供了扩展方法.
翻开Generator源码,看到以下代码片段:
public void setMetaBuilder(MetaBuilder metaBuilder) {
if (metaBuilder != null) {
this.metaBuilder = metaBuilder;
}
}
MetaBuilder是表结构构建的主类,而这个方法给我们提供了扩展MetaBuilder的可能。
翻开MetaBuilder源码,查看BuildTableNames方法.
protected void buildTableNames(List<TableMeta> ret) throws SQLException {
ResultSet rs = getTablesResultSet();
while (rs.next()) {
String tableName = rs.getString("TABLE_NAME");
if (excludedTables.contains(tableName)) {
System.out.println("Skip table :" + tableName);
continue ;
}
if (isSkipTable(tableName)) {
System.out.println("Skip table :" + tableName);
continue ;
}
TableMeta tableMeta = new TableMeta();
tableMeta.name = tableName;
tableMeta.remarks = rs.getString("REMARKS");
tableMeta.modelName = buildModelName(tableName);
tableMeta.baseModelName = buildBaseModelName(tableMeta.modelName);
ret.add(tableMeta);
}
rs.close();
}
这个方法就是用来检测哪些表用于生成.
1.新建扩展类MetaBuilderExtend,继承MetaBuilder
2.新建一个Set集合用于存放指定生成的表
protected Set<String> processedTables = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
3.在MetaBuilderExtend中重写方法buildTableNames,并添加以下新增代码行,用于过滤不需要生成的表
if(!processedTables.contains(tableName)) {
System.out.println("Skip table :" + tableName);
continue ;
}
4.修改Gernerator中的默认MetaBuilder为自定义的类MetaBuilderExtend
MetaBuilderExtend metaBuilder = new MetaBuilderExtend(getDataSource());
metaBuilder.addProcessedTable("table1","table2");// 添加需要生成的表
以上。重新运行_JFinalDemoGenerator.java即可只生成table1和table2两个表的Model实例.
源码下载:Extended-MetaBuilder-in-JFinal
作者简介:
昵称:凡辛(Fancye)
从事金融行业,热衷于各种IT前后端技术,立志成为一个会写代码的架构师。
个人博客:http://code.baininghan.com
头条号/公众号:老白聊技术