• Gorm与数据库(单复数)表结构之间的映射


    Gorm连接MySQL:

    import (
       _ "github.com/go-sql-driver/mysql"
       "github.com/jinzhu/gorm"
    )
    
    type User struct {
       Id   int    `json:"id"`
       Name string `json:"name"`
       Age  int    `json:"age"`
    }
    
    func GormTest() {
       dsn := username + ":" + password + "@tcp(" + addr + ")/" + datebase + "?charset=utf8&parseTime=true&loc=Local"
       var err error
       DB, err := gorm.Open("mysql", dsn)
       if err != nil {
          panic("MySQL conn failed:" + err.Error())
       }
       //DB.SingularTable(true)
    }
    

    数据库有复数表结构:

    数据库有复数表结构users,代码中定义user或users结构体,均能操作:

    DB.Create(&User{Name: "Li", Age: 5}) //成功
    DB.Create(&Users{Name: "Li", Age: 5}) //成功
    

    数据库有单数表结构:

    数据库有单数表结构user,代码中定义user或users结构体,均不能操作:

    DB.Create(&User{Name: "Li", Age: 5}) //Table 'test.users' doesn't exist
    DB.Create(&Users{Name: "Li", Age: 5}) //Table 'test.users' doesn't exist
    

    解决数据库单数表结构问题:

    获取数据库连接时,增加一条配置:

    DB.SingularTable(true)
    

    此时,代码结构体单复数和数据库表名单复数必须对应,单对单,复对复:

    DB.Create(&User{Name: "Li", Age: 5}) //成功
    DB.Create(&Users{Name: "Li", Age: 5}) //Table 'test.users' doesn't exist
    

    通过代码创建数据库表结构:

    不加SingularTable配置,通过代码创建表,不管结构体是单数复数,生成的表都为复数:

     DB.AutoMigrate(&User{}) //生成users
     DB.AutoMigrate(&Students{}) //生成students
    

    加SingularTable配置,通过代码创建表,结构体单数生成单数表,结构体复数生成复数表:

     DB.AutoMigrate(&User{}) //生成user
     DB.AutoMigrate(&Students{}) //生成students
    

    公众号:李田路口

  • 相关阅读:
    输出流对象
    1.2最简单的c++程序
    c++的初步认识
    理想程序员
    从字符数组中删除字符
    打印杨辉三角
    旋转数组
    找出1000以内的所有完数
    计算兔子的总数
    101-200有多少个素数?
  • 原文地址:https://www.cnblogs.com/dubinyang/p/12129923.html
Copyright © 2020-2023  润新知