model与数据库表中的字段对应问题

波总,我新手刚学习JFinal,请教下,如果我的JSP页面表单中,用的model的属性,不想跟数据库表字段完全一致的时候,要怎么做?比如我JSP中是这样写的

姓名:<input type="text" name="student.name" value="${student.name}"/>

但我数据库student这个表中定义的字段叫做 studentname.   这样的情况如何做对应?因为有时候数据库定义的字段很难记,在java端model调用 get(),或者view中使用model的属性时,都不太方便。

第二个问题,使用Generator生成baseModel的时候,如何跳过视图?因为我在尝试Generator的时候,对数据库的table遍历完过后,会继续遍历视图。但那些视图是系统生成的,没有主键,所以会报错。

评论区

JFinal

2017-03-03 11:52

第一个问题,最简单的办法是改一下页面的属性值,或者在 controller 中通过 getPara("student.name") 来获取,再 student.setStudentName(...) 给设置进去

第二个问题,jfinal 生成器所有组件都面向扩展设计,所以通过创建 public class MyMetaBuilder extends MetaBuilder,并覆盖其 isSkipTable(...) 方法,对其中所有 view 视图进行过滤就好

第二个问题,如果在 view 很少的情况下,还有一个简单办法是通过 generator.addExcludedTable(...) 来进行过滤,不需要扩展

zhaols33

2017-03-03 13:56

@JFinal 第一个问题,你说的改一下页面属性值,意思还是把页面的属性设置成跟数据库的字段一致?这种做法是简单,但我的问题就是如果页面属性设置跟数据库字段不一致的时候,要怎么办?你给出的方案在controller 中通过getPara("student.name") 来获取,再 student.setStudentName(...) 给设置进去,如果这样子做的话,首先没办法使用getModel(Student.class)方法来获取对象,只能通过getPara()对每个属性读取一遍?读完之后再set一遍?感觉这样每次使用起来会很麻烦,请问有没有更好的解决办法呢?。
第二个问题: 我知道可以通过重写isSkipTable,但是这个方法的也只是可以对tableName来做一些过滤,没办法判断出是视图,还是table啊,如果视图的命名并不规律的话,这种过滤会很麻烦吧。同样generator.addExcludedTable(...) 也是对tableName的过滤,好像达不要我想要的目的。一次性直接过滤掉所有的视图。

JFinal

2017-03-03 15:44

第一个问题,就是指改成与数据库字段一样

第二个问题,仍然可以使用 getModel(Student.class, true) 来获取,只不过在最后面添加一个 true 参数

addExcludeTable 可以处理 view,你可以使用正则表达式,或者通过配置文件的方式去除掉不要的 view,你也可以直接覆盖掉 getTablesResultSet() 方法,将:
new String[]{"TABLE", "VIEW"}
改成:
new String[]{"TABLE"}

总之 Genereator 中的所有方法都是面象扩展的,希望大家能举一反三的去扩展

热门反馈

扫码入社