xorm插入数据库后返回主键自增id

Posted chaselogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xorm插入数据库后返回主键自增id相关的知识,希望对你有一定的参考价值。

golang使用xorm连接数据库后,插入结构体,无法返回自增主键id,饭后的主键id都是0。经过研究发现,如果给结构体id设置xorm tag,则会默认id为0,不会返回插入成功后的主键id。

xorm文档中如下描述

技术分享图片

 

 1 package main
 2 
 3 import (
 4     "fmt"
 5     "time"
 6 
 7     _ "github.com/go-sql-driver/mysql"
 8     "github.com/go-xorm/xorm"
 9 )
10 
11 type User struct {
12     // 如果此处 `xorm:"id"`,则插入数据的时候,会默认为0,插入成功后不会把新插入的id返回,如果想得到插入后的主键id,则id不需要写`xorm:"id"`
13     Id      int64     //`xorm:"id"`
14     Name    string    `xorm:"name"`
15     Created time.Time `xorm:"created"`
16     Updated time.Time `xorm:"updated"`
17     Deleted time.Time `xorm:"deleted"`
18 }
19 
20 // 设置user结构体对应的表名
21 func (User) TableName() string {
22     return "test_user_2"
23 }
24 
25 func main() {
26     engine, err := xorm.NewEngine("mysql", "root:[email protected](10.10.30.99:3306)/test?charset=utf8")
27     if err != nil {
28         fmt.Println("connect mysql is failed, err:", err)
29     }
30 
31     u := &User{
32         Name: "aaa",
33     }
34     // 可插入多条engine.Insert(u1,u2)
35     affecte, err := engine.Insert(u)
36     if err != nil {
37         fmt.Println("insert is failed,err:", err)
38     }
39     fmt.Println("affect=", affecte, u.Id)
40 }

 

以上是关于xorm插入数据库后返回主键自增id的主要内容,如果未能解决你的问题,请参考以下文章

MySQL手动插入数据时怎么让主键自增!

mysql 主键自增 怎么处理

db2中插入数据后直接返回主键(自增列id)的sql怎么写

怎么设置主键自增

mybatis批量插入,怎么返回生成的自增主键

SQL 一个表只有一个自增的主键字段,如何插入