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

公眾號:李田路口


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM