关于JFinal2.1 Generator 的一点疑问?

小飞象 发布于 2016/01/09 17:34
阅读 458
收藏 0
// model 所使用的包名 (MappingKit 默认使用的包名)

String modelPackageName = "com.demo.common.model";

请问这个包名如何动态设定 ,包多了一层表名路径,想要的效果是

com.demo.common.model.blog.Blog

com.demo.common.model.comment.Comment

com.demo.common.model.user.User

请教下 @JFinal  这个JFinal2.1支持设置 或 扩展吗?





加载中
0
JFinal
JFinal

     生成这类 Model,主要是两个地方不同,一个是 packageName 不固定,二是生成文件保存的 savePath 不同,实现方式极度简单,只需要自建一个 MyModelGenerator extends ModelGenerator,覆盖其中的 genPackage(...)以及writeToFile(...) 两个方法,在原有的实现上让变量值变化一下,然后通过 generator.setModelGenerator(new MyModelGeneratory(...)) 覆盖掉系统提供的实现类即可。

    jfinal 的 generator这一部分所有类中的属性和方法都是 protected 的,专为扩展而设计。搞定后回来分享一下。

0
bboss
bboss
可以参考一下bboss的自动代码生成框架,做个界面配置,会更加直观一些:
在线试用:http://gencode.bbossgroups.com/
工具使用指南:http://yin-bp.iteye.com/blog/2256948
0
小飞象
小飞象

@JFinal 按照你讲的思路写了几个生成的扩展类:

做了小的调整:

protected void genPackage(TableMeta tableMeta, StringBuilder ret) {
		ret.append(String.format(packageTemplate, baseModelPackageName, tableMeta.name.toLowerCase().replaceAll("_", "")));
	}



File dir = new File(baseModelOutputDir + File.separator + tableMeta.name.toLowerCase().replaceAll("_", "") );
		if (!dir.exists())
			dir.mkdirs();
		
		String target = baseModelOutputDir + File.separator + tableMeta.name.toLowerCase().replaceAll("_", "") + File.separator + tableMeta.baseModelName + ".java";

测试生成正常。

生成main里面这样写 : 

Generator gernerator = new Generator(dataSource, new ExtBaseModelGenerator(baseModelPackageName, baseModelOutputDir), 
					new ExtModelGenerator(modelPackageName, baseModelPackageName, modelOutputDir));
			
			gernerator.setMappingKitGenerator(new ExtMappingKitGenerator(modelPackageName, modelOutputDir, modelPackageName));



生成的项目结构:


0
车开源
车开源
初步看看2.1,代码生成部分跟Liferay的ServiceBuilder有点相似,赞!
0
JFinal
JFinal

引用来自“小飞象”的评论

@JFinal 按照你讲的思路写了几个生成的扩展类:

做了小的调整:

protected void genPackage(TableMeta tableMeta, StringBuilder ret) {
		ret.append(String.format(packageTemplate, baseModelPackageName, tableMeta.name.toLowerCase().replaceAll("_", "")));
	}



File dir = new File(baseModelOutputDir + File.separator + tableMeta.name.toLowerCase().replaceAll("_", "") );
		if (!dir.exists())
			dir.mkdirs();
		
		String target = baseModelOutputDir + File.separator + tableMeta.name.toLowerCase().replaceAll("_", "") + File.separator + tableMeta.baseModelName + ".java";

测试生成正常。

生成main里面这样写 : 

Generator gernerator = new Generator(dataSource, new ExtBaseModelGenerator(baseModelPackageName, baseModelOutputDir), 
					new ExtModelGenerator(modelPackageName, baseModelPackageName, modelOutputDir));
			
			gernerator.setMappingKitGenerator(new ExtMappingKitGenerator(modelPackageName, modelOutputDir, modelPackageName));



生成的项目结构:


   Generator 充分考虑过扩展性,因为不同的开发者的喜好千差万别,另外建议 BaseModel  生成在一个统一的目录下,通常来说这个类是不需要查看,并且是完全由生成器自动化管理的。
JFinal
JFinal
回复 @小飞象 : 当然可以,在现有的生成器之上,利用 MetaBuilder 生成的 Meta 信息进一步生成 Service 也是分分钟的事,仿照现有的 ModelGenerator 来写就行
小飞象
小飞象
回复 @JFinal : 请问下 后面我想做service、controller甚至更多的代码生成,可以基于目前的Generator来扩展吗?
小飞象
小飞象
回复 @JFinal : 好的
JFinal
JFinal
回复 @小飞象 : jfinal 生成器今天在对扩展性做更友好地设计,明天建议再升级一下,更易扩展
小飞象
小飞象
嗯 建议有道理。
返回顶部
顶部