基礎(chǔ)CRUD操作文件記錄
基本的插入、更新浦楣、刪除享完、更多查看 GROM官網(wǎng) 查詢
默認(rèn)不使用全局日志輸出,可以在執(zhí)行前的代碼加上Debug()
可以輸出執(zhí)行的SQL語句
例如:db.Debug().Unscoped().Delete(&user)
package main
import (
"fmt"
"time"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
// User 用戶結(jié)構(gòu)體
type User struct {
gorm.Model
Name string `gorm:"size:100"`
Age uint `gorm:"size:3"`
Address string `gorm:"type:varchar(100)"`
Money float64 `gorm:"type:decimal(10,2)"`
Birthday time.Time
}
// TableName 通過TableName方法將User表命名為`sys_users`
func (user User) TableName() string {
return "sys_user"
}
// BeforeCreate 想在BeforeCreate hook 中修改字段的值
func (user *User) BeforeCreate(scope *gorm.Scope) error {
fmt.Println("結(jié)構(gòu)創(chuàng)建前")
// scope.SetColumn("ID", uuid.New())
return nil
}
// BeforeUpdate 想在BeforeUpdate hook 中修改字段的值
func (user *User) BeforeUpdate(scope *gorm.Scope) error {
fmt.Println("結(jié)構(gòu)更新前")
// 使用UpdateColumn轻庆, UpdateColumns不會觸發(fā)
// scope.SetColumn("ID", uuid.New())
return nil
}
// AfterUpdate 想在AfterUpdate hook 中修改字段的值
func (user *User) AfterUpdate(scope *gorm.Scope) error {
fmt.Println("結(jié)構(gòu)更新后")
// 使用UpdateColumn癣猾, UpdateColumns不會觸發(fā)
// scope.SetColumn("ID", uuid.New())
return nil
}
// BeforeSave 想在BeforeSave hook 中修改字段的值
func (user *User) BeforeSave(scope *gorm.Scope) error {
fmt.Println("結(jié)構(gòu)保存前")
// 使用UpdateColumn敛劝, UpdateColumns不會觸發(fā)
// scope.SetColumn("EncryptedPassword", pw)
return nil
}
// String 用戶字符串化
func (user *User) String() string {
return fmt.Sprintf("編號:%d ,名字:%s 纷宇,年齡: %d 夸盟, 金錢: %.3f , 生日:%s", user.ID, user.Name, user.Age, user.Money, user.Birthday)
}
// 基礎(chǔ)CRUD
func main() {
db, err := gorm.Open("mysql", "username:password@(127.0.0.1:3306)/database?charset=utf8&parseTime=True&loc=Local")
if err != nil {
println("err", err)
}
defer db.Close()
// 創(chuàng)建表
// db.CreateTable(&User{})
// 檢查表是否存在
// db.HasTable(&User{})
// 刪除表
// db.DropTable(&User{})
// 不存在表時創(chuàng)建
db.AutoMigrate(&User{})
// 插入
user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now(), Money: 123.34}
fmt.Printf("數(shù)據(jù)庫內(nèi)結(jié)果主鍵為空 %t \n", db.NewRecord(user))
db.Create(&user)
// fmt.Println(user.String())
// 更新單屬性
// db.Model(&user).Update("name", "update")
// 更新根據(jù)給定的條件更新單個屬性
//db.Model(&user).Where("age = ?", 18).Update("name", "update")
// 更新使用 struct 更新多個屬性像捶,只會更新其中有變化且為非零值的字段
// db.Model(&user).Updates(User{Name: "update", Age: 66, Ac: 99.99})
// fmt.Println(user.String())
// 刪除現(xiàn)有記錄 只會將DeletedAt 字段的值會被設(shè)置為當(dāng)前時間
// db.Delete(&user)
// 直接清除記錄
// db.Unscoped().Delete(&user)
// 條件刪除
// db.Where("name LIKE ?", "%update%").Delete(User{})
// fmt.Println(user.String())
// user := User{}
// 通過主鍵查詢第一條記錄
// db.First(&user)
// 隨機(jī)取一條記錄
// db.Take(&user)
// 通過主鍵查詢最后一條記錄
// db.Last(&user)
// 查詢指定的某條記錄ID(只可在主鍵為整數(shù)型時使用)
// db.First(&user, 1)
// 通過條件查詢第一條記錄
// db.Where("age = ?", "18").First(&user)
// fmt.Println(user.String())
var users []User
// 拿到所有的記錄
db.Find(&users)
// 通過條件指定字段查詢
// db.Where("age = ?", "18").Find(&users)
// 通過條件多指定字段查詢
// db.Where("name = ? AND age >= ?", "jinzhu", "18").Find(&users)
// 通過條件<>查詢關(guān)鍵字前后
// db.Where("name <> ?", "jinzhu").Find(&users)
// 通過條件in查詢關(guān)鍵字是否存在
// db.Where("age IN (?)", []float64{18, 20}).Find(&users)
// 通過條件link模糊查詢
// db.Where("name LIKE ?", "%jin%").Find(&users)
// 通過條件BETWEEN AND區(qū)間范圍查詢
// db.Where("created_at BETWEEN ? AND ?", "2019-11-15 19:17:03", time.Now()).Find(&users)
// 通過條件>指定值查詢
// db.Where("created_at > ?", "2019-11-15 10:17:03").Find(&users)
// 通過條件不等值查詢 類似where
// db.Not("created_at > ?", "2019-11-15 10:17:03").Find(&users)
// 通過條件Or查詢 Struct 結(jié)構(gòu)體參數(shù)
// db.Where("name = 'jinzhu'").Or(User{Name: "jinzhu 2"}).Find(&users)
// 通過條件Or查詢 Map 多值條件
// db.Where("name = 'jinzhu'").Or(map[string]interface{}{"name": "jinzhu1234"}).Find(&users)
// 通過Select上陕,指定你想從數(shù)據(jù)庫中檢索出的字段桩砰,默認(rèn)會選擇全部字段
// db.Select([]string{"name", "age"}).Find(&users)
// 查詢軟刪除記錄
// db.Debug().Unscoped().Where("deleted_at is not NULL").Find(&users)
for i, v := range users {
fmt.Println(i, v.String())
}
// 恢復(fù)刪除記錄
// user := User{}
// db.Unscoped().Where("deleted_at is not NULL and id = ?", 5).Find(&user)
// db.Unscoped().Model(&user).Where("deleted_at is not NULL").Update("deleted_at", nil)
// fmt.Println(user.String())
}