V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
zanelee
V2EX  ›  Go 编程语言

xorm 的结构体字段映射

  •  
  •   zanelee · 318 天前 · 723 次点击
    这是一个创建于 318 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想把公共的字段( 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;
    2 条回复    2023-06-15 01:35:59 +08:00
    zanelee
        1
    zanelee  
    OP
       318 天前
    第一个问题又看了看文档已经解决了,是要在对应的嵌套的结构体后面加 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 列
    hzzhzzdogee
        2
    hzzhzzdogee  
       318 天前
    关于问题 2, 我印象中表字段顺序就是按照 struct 字段顺序排列的吧?

    你是想用 tag 手动标注字段顺序, 似乎没有这个功能.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   882 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:27 · PVG 04:27 · LAX 13:27 · JFK 16:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.