gorm的入门

GORM操作MySQL

使用GORM连接上面的db1进行创建、查询、更新、删除操作。

var (
	DB *gorm.DB
)

type Userinfo struct {
	ID     int
	Name   string
	Gender string
	Hobby  string
}

func initMySQL() (err error) {
	dsn := "root:123456@tcp(localhost:3306)/bubble?charset=utf8"
	DB, err = gorm.Open("mysql", dsn)
	fmt.Println("err ", err)
	if err != nil {
		return err
	}
	// 判断是否连接成功
	return DB.DB().Ping()
}
func main() {
	// 连接数据库
	err := initMySQL()
	if err != nil {
		panic("连接数据库失败")
	}
	defer DB.Close()
	// 模型绑定
	DB.AutoMigrate(&Userinfo{})
	//创建记录
	u1 := Userinfo{1, "打阿伟", "男", "玩云桑"}
	DB.Create(&u1)
	var u Userinfo
	DB.First(&u) //查询表的第一条数据
	fmt.Println(u)
	//更新
	DB.Model(&u).Update("hobby", "打阿伟")
	//删除
	DB.Delete(&u)
}

GORM Model定义

在使用ORM工具时,通常我们需要在代码中定义模型(Models)与数据库中的数据表进行映射,在GORM中模型(Models)通常是正常定义的结构体、基本的go类型或它们的指针。 同时也支持sql.Scanner及driver.Valuer接口(interfaces)

为了方便模型定义,GORM内置了一个gorm.Model结构体。gorm.Model是一个包含了ID, CreatedAt, UpdatedAt, DeletedAt四个字段的Golang结构体。

var (
	DB *gorm.DB
)

//定义模型

type User struct {
	gorm.Model   //内嵌gorm.Model
	Name         string
	Age          sql.NullInt64 //零值类型
	Birthday     *time.Time
	Email        string  `gorm:"type:varchar(100);unique_index"` //建立唯一索引 email不能重复
	Role         string  `gorm:"size:255"`                       // 设置字段大小为255
	MemberNumber *string `gorm:"unique;not null"`                // 设置会员号(member number)唯一并且不为空
	Num          int     `gorm:"AUTO_INCREMENT"`                 // 设置 num 为自增类型
	Address      string  `gorm:"index:addr"`                     // 给address字段创建名为addr的索引
	IgnoreMe     int     `gorm:"-"`                              // 忽略本字段
}

func initMySQL() (err error) {
	dsn := "root:123456@tcp(localhost:3306)/bubble?charset=utf8"
	DB, err = gorm.Open("mysql", dsn)
	fmt.Println("err ", err)
	if err != nil {
		return err
	}
	// 判断是否连接成功
	return DB.DB().Ping()
}
func main() {
	//给表名加前缀
	gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string {
		return "zn_" + defaultTableName
	}
	// 连接数据库
	err := initMySQL()
	if err != nil {
		panic("连接数据库失败")
	}
	defer DB.Close()
	DB.AutoMigrate(&User{})

}

结构体标记(tags)

使用结构体声明模型时,标记(tags)是可选项。gorm支持以下标记:

支持的结构体标记(Struct tags)

在这里插入图片描述
关联相关标记(tags)

在这里插入图片描述

时间戳跟踪

CreatedAt
如果模型有 CreatedAt字段,该字段的值将会是初次创建记录的时间。

db.Create(&user) // `CreatedAt`将会是当前时间

// 可以使用`Update`方法来改变`CreateAt`的值
db.Model(&user).Update("CreatedAt", time.Now())

UpdatedAt
如果模型有UpdatedAt字段,该字段的值将会是每次更新记录的时间。

db.Save(&user) // `UpdatedAt`将会是当前时间

db.Model(&user).Update("name", "jinzhu") // `UpdatedAt`将会是当前时间

DeletedAt
如果模型有DeletedAt字段,调用Delete删除该记录时,将会设置DeletedAt字段为当前时间,而不是直接将记录从数据库中删除。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值