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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.