`

和xorm对接的结构体的字段名有讲究

 
阅读更多

首先说一下问题:

由于id,name对是个常见的结构,所以我定义了结构体如下:

type IDName struct{

ID int64 `json:"id"`

Name string `json:"name"`

}

然后用类似如下方式从数据库获取列值:

var idNames []IDName

engine.Sql("SELECT id,name FROM XXX").Find(&idNames)

结果发现ID值都是0,但是Name值都可以正常获取

 

开始怀疑没有加xorm类型映射,修改如下:

type IDName struct{

ID int64 `json:"id" xorm:"INTEGER"`

Name string `json:"name"`

}

结果问题照旧。

 

最后修改为:

type IDName struct{

Id int64 `json:"id" xorm:"INTEGER"`

Name string `json:"name"`

}

问题解决, 其实就是"ID"和"Id"一个字符的差别。

究其原因呢,是因为xorm引擎默认使用了SnakeMapper来关联数据库字段名和结构体字段名,由于“ID”不满足驼峰命名法,所以映射失败了。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics