升级到JFinal 3.3后发现BaseModel和Model的代码生成已经换成模板实现了(詹总推出模板的这一天就注定了这个改动的到来……),由于我对Model和BaseModel进行了进一步的封装,所以3.2的时候我就对此进行过改动以满足个人需求。
在适配3.3的时候,模板修改方便没有任何问题,而且看起来比以前更加优雅,但当我重复生成某张表的Model的时候抛出如下异常:
然后我看了源代码,发现JFinal每次生成代码的时候都会创建一遍对应的模板。
为此我咨询了詹总,他的回复是代码生成应该是一次性操作,生成之后就退出JVM了,所以应该不存在这个问题。但是我把代码生成嵌入到了WEB项目,可以指定表、指定包进行生成,所以存在多次调用的情况,也就触发了这个异常。
解决方法也很简单,覆盖Generator的generate()方法,super.generate();后添加以下代码移除模板即可。
注:我这边没有生成MappingKit的需求,如果需要重复调用生成MappingKit,也应该要添加Engine.remove("forMappingKit");
打完收工~
我还想到一个更好的解决办法, 在调用完 generator.generate() 这个方法以后,再调用三次 remove 就可以了:
Engine.remove("forBaseModel");
Engine.remove("forModel");
Engine.remove("forMappingKit");
这种方式可以不用对 BaseModelGenerator 这些类扩展,你试试