Shrimp007 / rapid-framework

Automatically exported from code.google.com/p/rapid-framework
0 stars 0 forks source link

数据库表中列名使用下划线的问题 #53

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
rapid版本:rapid-framework-3.5.1.3.zip

使用的相关插件组合是:jdbc+Struts2

按如下步骤重现错误:
1.数据库列名为        P_MULTIPLY   CO_NO
2.最后SQL中会变成     PMULTIPLY    CO_NO

期待的结果是:         P_MULTIPLY   CO_NO

查看代码知这部分转换存在于
cn.org.rapid_framework.jdbc.sqlgenerator.metadata.MetadataCreateUtils
中toUnderscoreName函数
1.数据库表对应的MODEL中相应字段为 pmultiply   coNo
2.toUnderscoreName函数中会通过判断下一个字符是否为大写来添��
�下划线

因此问题的关键在于创建列名时对于 
单字符+下划线+其余字符的列名转换存在问题

对于 P_MULTIPLY 列应该转化为 pMultiply  而非 pmultiply   

Original issue reported on code.google.com by neolf....@gmail.com on 23 Jun 2010 at 6:41

GoogleCodeExporter commented 9 years ago
public static String makeAllWordFirstLetterUpperCase(String sqlName) {
        String[] strs = sqlName.toLowerCase().split("_");
        String result = "";
        String preStr = "";
        for(int i = 0; i < strs.length; i++) {
            if(preStr.length() == 1) {
                result += strs[i];
            }else {
                result += capitalize(strs[i]);
            }
            preStr = strs[i];
        }
        return result;
    }

好像问题就在这里
if(preStr.length() == 1) {
    result += strs[i];
这里为什么要加上一个判断呢?

Original comment by neolf....@gmail.com on 23 Jun 2010 at 6:54

GoogleCodeExporter commented 9 years ago
参考这里: http://code.google.com/p/rapid-framework/wiki/rapid_sqlgenerator

可以使用JPA的annotation,现只支持@Table,@ID,@Column,@Transient,示例如
下:

@Column(name="ann_age")

Original comment by bad...@gmail.com on 23 Jun 2010 at 6:58

GoogleCodeExporter commented 9 years ago
对于 P_MULTIPLY 列应该转化为 pMultiply  而非 pmultiply   

我现在将单字母转为pmultiply认为是正常的。

Original comment by bad...@gmail.com on 23 Jun 2010 at 7:00