package main
import (
"fmt"
"strings"
"time"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
"github.com/spaolacci/murmur3"
)
// UserInfo 用户信息
type UserInfo struct {
ID uint
Name string
Gender string
Hobby string
}
// 点赞表
type Like struct {
ID int `gorm:"primary_key"` // 设置主键
Ip string `gorm:"type:varchar(20);not null;index:ip_idx"` // 创建索引
Ua string `gorm:"type:varchar(256);not null;"`
Title string `gorm:"type:varchar(128);not null;index:title_idx"` // 创建索引
Hash uint64 `gorm:"unique_index:hash_idx;"` // 创建唯一索引
CreatedAt time.Time // 时间类型
}
// UserInfo 用户信息
type Animal struct {
ID int `gorm:"primary_key"`
Name string `gorm:"type:varchar(256)`
}
//事务 db.Begin() 声明开启事务,结束的时候调用 tx.Commit(),异常的时候调用 tx.Rollback()
func CreateAnimals(db *gorm.DB) err {
tx := db.Begin()
if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil {
tx.Rollback()
return err
}
if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil {
tx.Rollback()
return err
}
tx.Commit()
return nil
}
func main() {
db, err := gorm.Open("mysql", "root:123456@(127.0.0.1:3308)/gotest?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
panic(err)
}
defer db.Close()
// 设置连接池
db.DB().SetConnMaxIdleTime(5)
db.DB().SetMaxOpenConns(100)
// 自动迁移
db.AutoMigrate(&UserInfo{})
u1 := UserInfo{1, "枯藤", "男", "篮球"}
u2 := UserInfo{4, "topgoer.com", "女", "足球"}
u3 := UserInfo{3, "zzd", "男", "台球"}
// 创建记录
db.Create(&u1)
db.Create(&u2)
db.Create(&u3)
// 查询
var u = new(UserInfo)
db.First(u)
var uu UserInfo
// where 查询, 当条件不唯一取最后一条
db.Find(&uu, "hobby=?", "足球")
fmt.Printf("%#v\n", uu)
// 更新
db.Model(&uu).Update("hobby", "子色球")
db.Model(&uu).Updates(UserInfo{Name: "hell", Hobby: "乒乓求"})
// 删除
db.Delete(&u)
// 创建表
if !db.HasTable(&Like{}) {
// 可以通过db.Set为表设置额外属性
if err := db.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8").CreateTable(&Like{}).Error; err != nil {
panic(err)
}
}
// 先构造已给对象,直接调用 db.Create() 就可以插入一条记录了
var ip = "10.10.10.10"
var ua = "haha"
var title = "title"
like := &Like{
Ip: ip,
Ua: ua,
Title: title,
Hash: murmur3.Sum64([]byte(strings.Join([]string{ip, ua, title}, "-"))) >> 1,
CreatedAt: time.Now(),
}
if err := db.Create(like).Error; err != nil {
return
}
// // 先用 db.Where() 构造查询条件,再调用 db.Delete() 就可以删除
// var hash uint64 = 7922748826473719846
// if err := db.Where(&Like{Hash: hash}).Delete(Like{}).Error; err != nil {
// return
// }
var count int
// db.Model选择表,Count计算 Where 条件出的数量
err2 := db.Model(&Like{}).Where(&Like{Ip: ip, Ua: ua, Title: title}).Count(&count).Error
if err2 != nil {
return
}
fmt.Println(count)
}
更新数据update 解决值为0时被忽略
values := map[string]uint{
"Status": status,
}
DB.Model(&User{}).Where(query, args...).Update(values)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)