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

公众号:李田路口

原文地址:https://www.cnblogs.com/dubinyang/p/12129923.html