Golang Go语言中xorm的结构体字段映射

发布于 1周前 作者 h691938207 来自 Go语言

想把公共的字段( id,create_time,update_time…)拿出来单独放一个结构体,然后嵌套到结构体上最后映射到字段上。试了一下,发现它直接把嵌套的结构体名作为 text 类型的字段创建到了表上了。

1.xorm 支持嵌套结构体然后映射字段吗?
2.xorm 能不能通过字段属性定义字段的前后顺序?

type BaseModel struct {
Id int32 json:"id" xorm:"int pk autoincr(1) comment('用户 ID')"
CreateAt time.Time json:"create_at" xorm:"create_at updated comment('创建时间')"
UpdateAt time.Time json:"update_at" xorm:"update_at updated comment('更新时间')"
}

type User struct {
UserName string json:"username" xorm:"varchar(32) notnull comment('用户名')"
Password string json:"password" xorm:"varchar(32) notnull comment('用户密码')"
BaseModel
}

最后出现了在数据库上的表定义是:
CREATE TABLE user (
user_name varchar(32) NOT NULL COMMENT ‘用户名’,
password varchar(32) NOT NULL COMMENT ‘用户密码’,
base_model text
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
Golang Go语言中xorm的结构体字段映射


更多关于Golang Go语言中xorm的结构体字段映射的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

第一个问题又看了看文档已经解决了,是要在对应的嵌套的结构体后面加 extends 的属性定义
type User struct {
UserName string json:"username" xorm:"varchar(32) notnull comment('用户名')"
Password string json:"password" xorm:"varchar(32) notnull comment('用户密码')"
BaseModel xorm:"extends"
}
定义字段的顺序还是没发现怎么搞,比如我想要 id 字段在数据库表结构的字段是第 1 列,create_at 和 update_at 在最后 2 列

更多关于Golang Go语言中xorm的结构体字段映射的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


关于问题 2, 我印象中表字段顺序就是按照 struct 字段顺序排列的吧?

你是想用 tag 手动标注字段顺序, 似乎没有这个功能.

在Go语言中,Xorm是一个简单而强大的ORM(对象关系映射)库,它允许开发者通过Go的结构体来操作数据库中的表。在使用Xorm进行结构体字段映射时,通常需要注意以下几点:

  1. 结构体标签:Xorm通过结构体字段上的标签(tag)来映射数据库表的列。例如,xorm:"'column_name'"可以指定结构体字段映射到数据库中的哪个列。如果字段名与列名相同,可以省略此标签。

  2. 数据类型:确保结构体字段的类型与数据库列的类型兼容。Xorm支持多种Go语言基本类型和自定义类型,这些类型会映射到数据库中的相应类型。

  3. 主键与自增:通过xorm:"'pk' autoincr"标签可以指定某个字段为主键且自增。这通常是主键ID字段的常用设置。

  4. 忽略字段:如果某个结构体字段不需要映射到数据库列,可以使用-标签来忽略它,例如xorm:"-"

  5. 索引与唯一约束:可以通过标签为字段添加索引或唯一约束,如xorm:"index"xorm:"unique"

  6. 时间类型:对于时间类型的字段,Xorm支持多种时间格式,可以通过标签指定时间格式,如xorm:"TypeTime 'YYYY-MM-DD HH:MI:SS'"

通过合理使用这些标签和类型映射,Xorm可以极大地简化数据库操作,提高开发效率。

回到顶部