Model对象、数据库字段、view的表单域名称对应关系

波老板,您好:

我遇到两个问题:

一、Model属性映射关系

在项目中会出现切换数据源的情况,在达梦下面开发的程序,需要去适配Oracle、SQL Server和MySQL等数据库,由于各自数据库服务器的实现原因,自动生成的Model对象字段属性保持一致,或者JFinal推荐一个统一的字段命名规则,之后自动生成的Model对象字段属性全部一样,通过数据库方言和JDBC实现一致的数据访问。

比如:

数据库表字段<->Model属性

MySQL: first_name varchar(20) <->firstName

Oracle: FIRST_NAME VARCHAR2(20)<->firstName

达梦: FIRST_NAME VARCHAR(20)<->firstName

以上例子,如果实在MySQL下面开发的代码程序,切换到其他数据源,MySQL数据通过dts等工具迁移到Oracle、达梦等数据,程序代码不需要修改。可是达梦数据源迁移到MySQL的时候,view页面的表单几乎不能成功转换为Model对象 。

二、Model属性与view表单域名称

public void setFirstName(java.lang.String firstName) {

set("first_name", firstName);

}

public java.lang.String getFirstName() {

return get("first_name");

}

    <input type="text" name="user.first_name" value="${user.firstName}" />

比如上面使用jsp作为view视图,上面表单域的名称需要与Model中的数据库字段相互对应,是否可以实现调用el对象属性呢?

支持JFinal!

评论区

JFinal

2016-11-24 10:27

第一个问题:“可是达梦数据源迁移到MySQL的时候,view页面的表单几乎不能成功转换为Model对象 。”需要找到 view 页面表单几乎不能成功的具体原因,可以在 getBean 里面设置一个断点调试一下

第二个问题, input 域可以使用 name="user.firstName" 这种方式与 user 的 setter 方法对应上,而不必使用 name="user.first_name",既然生成了 BaseModel,具有了 getter、setter 方法,就使用 Controller.getBean(...) 而不要使用 getModel(...) 前者是完全根据你的 setter 方法名来注入的,属性是驼峰规则

搞定后回来分享下

shanmine

2016-11-24 11:29

@JFinal 第二个问题使用getBean解决了,多谢!第一个问题由于达梦、Oracle等数据库默认字段名称大写(不区分大写),导入MySQL后是大写,重新生成model会出现view不能转换成model对象的问题,JFinal没有对MySQL的大小写敏感处理,看源码中是对Oracle方言将字段转换成小写。问题出在dts工具上。。。(我是JFinal初识者,请多关照,谢谢了,波总)

JFinal

2016-11-24 11:46

@shanmine jfinal 未对 oracle 字段进行大小写转换处理, Oracle 方言中仅仅是 sql 语句用的小写。

如果要让 jfinal 对大小写不敏感,用一下 arp.setContainerFacotory(new CaseInsensitiveContainerFacotory()) 即可打完收工

热门反馈

扫码入社