Gorm 基础
Gorm 快速入门
//安装MySQL驱动、gorm包
go get -u gorm.io/driver/mysql
go get -u gorm.io/gormpackage main
import (
"errors"
"fmt"
"time"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type User struct {
gorm.Model // gorm 自带模型继承
Username string `gorm:"column:username;not null"` // 列名(字段名)为username,不为空
Password string `gorm:"column:password;not null"`
}
// 设置表名,可以通过给struct类型定义 TableName函数,返回当前struct绑定的mysql表名是什么
func (u User) TableName() string {
return "users"
}
func main() {
//配置MySQL连接参数
username := "root" //账号
password := "123456" //密码
host := "127.0.0.1" //数据库地址,可以是Ip或者域名
port := 3306 //数据库端口
Dbname := "tizi365" //数据库名
/*
通过前面的数据库参数,拼接 MYSQL DSN, 其实就是数据库连接串(数据源名称)
MYSQL dsn格式: {username}:{password}@tcp({host}:{port})/{Dbname}?charset=utf8&parseTime=True&loc=Local
*/
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", username, password, host, port, Dbname)
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("连接数据库失败, error=" + err.Error())
}
// 自动创建表 users, 也就是上面模型 User
db.AutoMigrate(&User{})
/* 增 */
u := User{
Username: "tizi365",
Password: "123456",
}
// 错误处理,默认gorm.DB的Error属性为 nil, 检测 Error 是否为nil
if err := db.Create(&u).Error; err != nil {
fmt.Println("插入失败", err)
return
}
/* 查 */
u = User{}
result := db.Where("username = ?", "tizi365").First(&u)
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
fmt.Println("找不到记录")
return
}
fmt.Println(u.Username, u.Password)
/* 改 */
db.Model(&User{}).Where("username = ?", "tizi365").Update("password", "654321")
/* 删 */
db.Where("username = ?", "tizi365").Delete(&User{})
}GORM 调试模式
GORM 高并发
GORM 插入数据
GORM 查询数据
GORM 更新数据
GORM 删除数据
GORM事务处理
共用: 多表关联测试
一对多
一对多测试模型
添加测试数据
查询某用户拥有几张信用卡
查询某ID的信用卡和归属用户
查询所有用户和所属信用卡
查询所有信用卡和归属用户
一对多,级联删除
一对一
一对一模型
用户查询自身份证
身份证反向查询用户
多对多
添加测试数据
通过用户查询角色
通过角色反查用户
参考地址
Beforce
GORM 模型定义
内置模型约定
自定义匿名字段模型约定
自定义正常字段模型约定
标签名
说明
示例
表字段标签
表关联标签
标签
描述
复数表名(表名)
GORM 数据库连接
MYSQL 官方指南配置
gorm调试模式
MYSQL 单机测试使用
MYSQL 封装测试调用
viper
安装 Viper
Viper 作用
Viper获取值
读取配置文件
写入配置文件
监控配置文件热加载
从io.Reader读取配置
远程Key/Value存储示例
更多其他方法参考
示例读取(ini,yaml)
Last updated