package main
import (
"fmt"
_ "github.com/jinzhu/gorm/dialects/mysql"
"github.com/jinzhu/gorm"
"time"
)
var (
//變量db 通過init直接初始化
db *gorm.DB
err error
dbinfo string
)
const (
//定義db的連接信息
dbuser string = "root"
dbpassword = "123456"
dbip = "xxxxxx"
dbport = "3306"
database = "users"
)
//定義user結構體
//不嵌入gorm的model
type User struct {
//因爲偶grome model 裏面有id所以不需要id字段
gorm.Model
Name string `gorm:"type:varchar(30);not null;default:' ' "`
Password string
Birthday time.Time
Tel string `gorm:"column:phone"`
Addr string
Descs string
}
func init() {
//拼接數據庫連接信息
dbinfo = fmt.Sprintf("%s:%s@(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local",dbuser,dbpassword,dbip,dbport,database)
//初始化db
db,err = gorm.Open("mysql", dbinfo)
if err != nil {
fmt.Println("mysql打開失敗",err)
return
}
//創建表關聯user結構體
db.AutoMigrate(&User{})
}
func (u *User) TableName() string {
return "users"
}
func NewUser(name ,password ,tel ,addr,desc string,birthday time.Time) *User{
return &User{
Name: name,
Password: password,
Birthday: birthday,
Tel: tel,
Addr: addr,
Descs: desc,
}
}
func main() {
//創建與原來一致
//for i:= 0 ;i<=10 ;i++{
// test := strconv.Itoa(i)
// user := NewUser(test,test,test,test,test,time.Now().UTC())
// db.Create(&user)
//}
db.LogMode(true)
var user1 User = User{
Model: gorm.Model{ID: 1},
Name: "woshi ",
Password: "asdasdada",
Birthday: time.Time{},
Tel: "",
Addr: "",
Descs: "",
}
//會修改update time 表示每次修改的時間
err := db.Save(&user1).Error
if err != nil {
fmt.Println(err)
}
//修改單個字段或者多個字段 批量修改 或者單個修改不會更改updatetime
//只更新列
err = db.Model(&User{}).Where("id > 18").UpdateColumn("name","haoren aaa").Error
if err != nil {
fmt.Println(err)
}
err = db.Model(&User{}).Where("id < 2").UpdateColumns(map[string]interface{}{"name":"wudi","password":"abcdefg"}).Error
if err != nil {
fmt.Println(err)
}
//使用update 的時候會修改updatetime
err = db.Model(&User{}).Where("id = 4").Update("name","devops").Error
if err != nil {
fmt.Println(err)
}
err = db.Model(&User{}).Where("id = 5").Updates(map[string]interface{}{"name":"asd","password":"sdasdadsa"}).Error
if err != nil {
fmt.Println(err)
}
//刪除數據 這裏嵌入gorm的model的話刪除只是修改delete time字段時間信息標記 在查詢的時候 delete time is not null 修改之前是null修改之後是一個time
err = db.Where("id = ?",23).Delete(&User{}).Error
if err != nil {
fmt.Println(err)
}
//添加Unscoped 表示強制刪除 就不是單純的更新delete time做一下標記 是數據直接刪除
err = db.Where("id = ?",23).Unscoped().Delete(&User{}).Error
if err != nil {
fmt.Println(err)
}
var users []User
db.Find(&users)
fmt.Println(users)
//exec可以使用原生sql 一般用作更新
//db.Exec()
//原生查詢語句
var user4 []User
err = db.Raw("select * from users where id = 24").Scan(&user4).Error
if err != nil {
fmt.Println(err)
return
}
fmt.Println(user4)
//事務機制
//事務開始
db.Begin()
//發生錯誤回滾
db.Rollback()
//提交事務
db.Commit()
}
Gorm-CRUD(2)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.