美文网首页
xorm 2022-03-16

xorm 2022-03-16

作者: 9_SooHyun | 来源:发表于2022-03-16 20:59 被阅读0次

    xorm set default value when inserting data

    定义如下结构体,映射数据库表my_struct

    type MyStruct struct {
        Number int `xorm:"not null default 10 INT(8)"`
    }
    
    // will number be set to default value 10 in the database? no
    data := MyStruct{}
    *xorm.Session.Insert(&data)
    // 在insert的时候,xorm会根据传入struct的field-value对应关系一一插入数据库
    // data是一个默认初始化的MyStruct,Number值为0,因此会往数据库里面插入0,而不是10
    // 那么如何使用xorm 的 default value呢?
    // 使用*xorm.Session.Cols(columns ...string)或者*xorm.Session.Omit(columns ...string)
    // 指定insert的字段,那么未指定的就会使用default value
    

    xorm not automatically give created field and updated field the current time

    use NoAutoTime()

    func (session *Session) NoAutoTime() *Session {
        session.statement.UseAutoTime = false
        return session
    }
    

    xorm的 extends tag

    orm模型下,一个结构体可以映射为数据库的一张表

    在未显式指定查询的目标表的情况下,xorm可以根据传给Get()或者Find()的结构体对象或者对象指针,自动判断要查找的目标表

    因此单表查询时,可以不必显式指定查询的目标表

    当多表联查时,我们需要设置辅助结构体来存储查询结果
    这个时候辅助结构体对应不上任何表名,因为它对应的是多表关联后的大表,如果仍然靠Find()、Get()自动推定查询表,必然会产生错误的sql
    因此,多表联查时,

    • 显式指定查询的目标表
    • 使用extends tag

    extends tag 告诉xorm在查找结果赋值时,完全展开extends标记的字段
    如果辅助结构体有一个匿名结构体字段但未加extends tag,那么该匿名结构体不会被结果赋值
    两种方法:要么匿名结构体字段而加extends,要么显式地手动展开所有的字段

    相关文章

      网友评论

          本文标题:xorm 2022-03-16

          本文链接:https://www.haomeiwen.com/subject/qgqmdrtx.html