目錄
- Gorm創建記錄及欄位默認值
- 創建
- 默認值
- 使用指標方式實作零值存入資料庫
- 使用Scanner/Valuer介面方式實作零值存入資料庫
- 創建
Gorm創建記錄及欄位默認值
CRUD通常指資料庫的增刪改查操作
創建
package main
import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
//1. 定義模型
type User struct {
ID int64
Name string
Age byte
}
func main() {
//2. 連接Mysql資料庫
db, err := gorm.Open("mysql","root:123456@tcp(127.0.0.1:3306)/db?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
panic(err)
}
defer db.Close()
//3. 把模型與資料庫中的表對應起來
db.AutoMigrate(&User{})
//4. 創建結構體實體
u := User{Name:"zisefeizhu", Age:22} //在代碼層面創建一個User物件
fmt.Println(db.NewRecord(&u)) // 主鍵為慷訓傳`true`
db.Create(&u) // 在資料庫中創建一條user記錄
fmt.Println(db.NewRecord(u)) // 創建`user`后回傳`false`
}
//E:\gostudent\gin\lesson21>go run main.go
//true
//false

默認值
可以通過 tag 定義欄位的默認值
func main() {
//2. 連接Mysql資料庫
db, err := gorm.Open("mysql","root:123456@tcp(127.0.0.1:3306)/db?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
panic(err)
}
defer db.Close()
//3. 把模型與資料庫中的表對應起來
db.AutoMigrate(&User{})
//4. 創建結構體實體
//u := User{Name: "zisefeizhu",Age:30} //在代碼層面創建一個User物件
//u := User{Age:30} //在代碼層面創建一個User物件
u := User{Age:30} //在代碼層面創建一個User物件
fmt.Println(db.NewRecord(&u)) // 主鍵為慷訓傳`true`
db.Create(&u) // 在資料庫中創建一條user記錄
fmt.Println(db.NewRecord(u)) // 創建`user`后回傳`false`
}

洗掉表在執行

上面代碼實際執行的SQL陳述句是INSERT INTO users("age") values('30');,排除了零值欄位Name,而在資料庫中這一條資料會使用設定的默認值zisefeizhu作為Name欄位的值,
注意:所有欄位的零值, 比如0, "",false或者其它零值,都不會保存到資料庫內,但會使用他們的默認值, 如果你想避免這種情況,可以考慮使用指標或實作 Scanner/Valuer介面,比如
u := User{Name: "",Age:50} //在代碼層面創建一個User物件
fmt.Println(db.NewRecord(&u)) // 主鍵為慷訓傳`true`
db.Debug().Create(&u) // 在資料庫中創建一條user記錄

使用指標方式實作零值存入資料庫
import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
//1. 定義模型
type User struct {
ID int64
Name *string `gorm:"default:'zisefeizhu'"` //注意指標
Age byte
}
func main() {
//2. 連接Mysql資料庫
db, err := gorm.Open("mysql","root:123456@tcp(127.0.0.1:3306)/db?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
panic(err)
}
defer db.Close()
//3. 把模型與資料庫中的表對應起來
db.AutoMigrate(&User{})
//4. 創建結構體實體
u := User{Name: new(string),Age:50} //在代碼層面創建一個User物件
fmt.Println(db.NewRecord(&u)) // 主鍵為慷訓傳`true`
db.Debug().Create(&u) // 在資料庫中創建一條user記錄
fmt.Println(db.NewRecord(u)) // 創建`user`后回傳`false`
}


使用Scanner/Valuer介面方式實作零值存入資料庫
import (
"database/sql"
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
//1. 定義模型
type User struct {
ID int64
//Name *string `gorm:"default:'zisefeizhu'"`
Name sql.NullString `gorm:"default:'zisefeizhu'"`
Age byte
}
func main() {
//2. 連接Mysql資料庫
db, err := gorm.Open("mysql","root:123456@tcp(127.0.0.1:3306)/db?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
panic(err)
}
defer db.Close()
//3. 把模型與資料庫中的表對應起來
db.AutoMigrate(&User{})
//4. 創建結構體實體
//u := User{Name: new(string),Age:50} //在代碼層面創建一個User物件
//u := User{Name: sql.NullString{"", true}, Age: 60}
u := User{Name: sql.NullString{"", false}, Age: 60}
fmt.Println(db.NewRecord(&u)) // 主鍵為慷訓傳`true`
db.Debug().Create(&u) // 在資料庫中創建一條user記錄
fmt.Println(db.NewRecord(u)) // 創建`user`后回傳`false`
}


轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/17372.html
標籤:Go
上一篇:gorm系列-model
下一篇:gorm系列-查詢
