[关闭]
@Fancy-Bai 2017-04-11T13:34:49.000000Z 字数 1899 阅读 1761

扩展JFinal中的MetaBuilder

JFinal


扩展JFinal中的MetaBuilder

JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!

JFinal官网

问题由来

JFinal 在使用Generator自动生成JavaBean类的时候,提供了以下方法:

但是并没有提供如果只想生成某些特定表的情况,还好JFinal提供了扩展方法.

解决思路

翻开Generator源码,看到以下代码片段:

  1. public void setMetaBuilder(MetaBuilder metaBuilder) {
  2. if (metaBuilder != null) {
  3. this.metaBuilder = metaBuilder;
  4. }
  5. }

MetaBuilder是表结构构建的主类,而这个方法给我们提供了扩展MetaBuilder的可能。

翻开MetaBuilder源码,查看BuildTableNames方法.

  1. protected void buildTableNames(List<TableMeta> ret) throws SQLException {
  2. ResultSet rs = getTablesResultSet();
  3. while (rs.next()) {
  4. String tableName = rs.getString("TABLE_NAME");
  5. if (excludedTables.contains(tableName)) {
  6. System.out.println("Skip table :" + tableName);
  7. continue ;
  8. }
  9. if (isSkipTable(tableName)) {
  10. System.out.println("Skip table :" + tableName);
  11. continue ;
  12. }
  13. TableMeta tableMeta = new TableMeta();
  14. tableMeta.name = tableName;
  15. tableMeta.remarks = rs.getString("REMARKS");
  16. tableMeta.modelName = buildModelName(tableName);
  17. tableMeta.baseModelName = buildBaseModelName(tableMeta.modelName);
  18. ret.add(tableMeta);
  19. }
  20. rs.close();
  21. }

这个方法就是用来检测哪些表用于生成.

扩展办法

1.新建扩展类MetaBuilderExtend,继承MetaBuilder
2.新建一个Set集合用于存放指定生成的表

  1. protected Set<String> processedTables = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);

3.在MetaBuilderExtend中重写方法buildTableNames,并添加以下新增代码行,用于过滤不需要生成的表

  1. if(!processedTables.contains(tableName)) {
  2. System.out.println("Skip table :" + tableName);
  3. continue ;
  4. }

4.修改Gernerator中的默认MetaBuilder为自定义的类MetaBuilderExtend

  1. MetaBuilderExtend metaBuilder = new MetaBuilderExtend(getDataSource());
  2. metaBuilder.addProcessedTable("table1","table2");// 添加需要生成的表

以上。重新运行_JFinalDemoGenerator.java即可只生成table1和table2两个表的Model实例.

源码下载:Extended-MetaBuilder-in-JFinal

作者简介:

昵称:凡辛(Fancye)
从事金融行业,热衷于各种IT前后端技术,立志成为一个会写代码的架构师。
个人博客:http://code.baininghan.com
头条号/公众号:老白聊技术

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注