Gorm-CRUD(2)

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()

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章