_Generator生成model的建议

_Generator用起来是真方便 

但是我有很多固定开头的表 不需要生成model  

这样每次用_Generator 我都需要在excludedTable里添加固定开头的不需要生成model的表名

(有些表是动态创建的 但是表名有固定开头)

能否再增加一个 过滤固定开头的 数组 类似 excludedTable 但是只需要配置表名的固定开头即可


评论区

JFinal

2020-05-08 10:45

MetaBuilder 中留了两个扩展的地方,一个是 isSkipTable(String tableName) ,另一个是 filter(Predicate predicate)

其中前一个需要继承 MetaBuilder 来扩展,这个是在 JDK 8 之前给定的扩展方式

后来 jfinal 要求至少 JDK 8 以后,留了 filter 这第二个扩展,扩展方式在源码的注释里头有:
Generator gen = new Generator(...);
gen.setMetaBuilder(new MetaBuilder(dataSource).filter(
tableName -> {
return tableName.startsWith("SYS_");
})
);
gen.addExcludedTable("error_log"); // 注意这行代码要放在上面的之后调用
gen.generate();

上面的例子中,排除掉了以 "SYS_" 打头的 table,应该正好是你需要的使用方法

jfinal 其实处处可扩展,建议有时间的时候稍微浏览一下源代码,必然会轻松增加很多新技能

JFinal

2020-05-08 10:46

补充一下,上例中用到的 filter 方法,只是演示了一种用法,你还可以通过正则表达式等其它方法决定其行为,只要是返回值为 true ,其 table 将会被过滤掉

祥子

2020-05-08 12:59

我觉得需要增加 addIncludedTable的方法,指定某些表生成,因为在开发的时候经常新增表,只需要生成新增的表

JFinal

2020-05-08 17:30

@祥子 这个通过扩展 MetaBuilder 也一样可以实现的, jfinal 只实现了最常用的场景,通常都是大部分 table 需要重成,少部分使用 addExcludedTable 来排除

此外,即便你是新增表,也可以老表、新表一起生成,只会覆盖 Base Model 等类文件,十分安全

老表、新表一起生成还有个好处,在老表结构改变以后,重新生成是强需求,否则很难办

祥子

2020-05-09 09:32

@JFinal 是的,可以实现,按照系统的设计规则有很多表的前缀不一样,导致在生成的时候,比如 cms_开头的生成的时候,会把sys_开头的生成为新的类

JFinal

2020-05-09 10:51

@祥子 jfinal 起步为 JDK 8 以后,添加的这个 filter 方法,支持 lambda 方式灵活控制需要被过滤的 table, 而无需继承 MetaBuilder 的方式扩展

强烈建议旧表、新表一起生成,否则当你旧表有改变时怎么办?

热门反馈

扫码入社