@JFinal 你好,想跟你请教个问题:有一事请教,JFinal要对数据库中的每张表生成一个controler(或者是做成model),每个类几乎一模一样,又要为每张表做增删改查的界面,如果你有100张表就要400个界面+至少100个java类,这不是要吐血吗?能否将数据库每张表的信息(要包括表名、字段名、字段类型、在界面显示的名称、在界面用何种控件显示、是否要编辑)做成json或者java数组形式储存在一个文件中,然后写个调用增删改查通用类根据前台信息调用或生成json回传就行了?freemarker完全没有存在的必要,只要用json把数据传到前台,用extjs、easyUI或者DWZ之类的前台处理界面不是更好吗?如果是多表查询直接传SQL到后台就行了,sql也放在json或者java数组中?本来我想用jfinal写个代码生成器,我去看了一个绝望的八皮的源码,但发现重复代码太多了,想先改进再做。如果我的思路错了,请指点迷津。
人生有限,何必浪费在代码重复。
jfinal 从第一个版本开始就已经支持楼主的需求了,jfinal 提供了 Db + Record 模式,可以极度方便地解决你的问题,Record 可以对应所有的表,也无需添加映射,她相当于一个通用的 Model,对数据库操作直接调用 Db 中的API 或者直接 Db.xxx(sql, p) 即可。
以上解决了楼主提出的 Model 多或者重复的问题(其实也没多少重复,因为一个Model就一行代码而已:class MyModel extends Model)。至于楼主说的 Controller 很多,可以使用一个通用的 controller,然后前端通过传参将 tableName 传送过来,这样就可以使用这同一个 controller 利用 Db + Record 模式对任意的 table 进行 CRUD 操作了。
对于页面来说,如果用一些只需 json 数据的前端解决方案来说,只接 renderJson() 即可,其它情况可以使用 Freemarker 模板,仅仅使用四五个页面即可解决任意数据表的 CRUD。
总结一下,JFinal 提供了一个极简的基本框架供工程师使用,具体怎么用要看工程师各自的发挥了。
表和controller 有什么关系呢?不是所有的表都要去做一个model,我很多关系比较弱的表直接用Record来操作
多谢指教。对于freemarker我还是持保留意见,它是服务器端的模板引擎,不可能满足前端用户的各种需求。还不如直接由json把数据交给前端的js框架,客户要怎么展示就怎么展示。Db + Record 模式不知道是不是少了一次java对前端数据的检查,而是把数据直接交给数据库检查?有了DB+Record为什么还要model?model模式是不是操作数据库前要从数据库里调用一下各个字段的属性对数据进行检查,然后再把数据传给数据库crud?这种模式也会增加数据库的一些负担。