[golang gin框架] 6.Gin GORM简介以及安装
介绍
GORM 是 Golang 的一个 orm 框架,简单说,ORM 就是通过实例对象的语法,完成关系型
数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写,使用 ORM
框架可以让我们更方便的操作数据库
GORM 官方支持的数据库类型有: MySQL, PostgreSQL, SQlite, SQL Server
Gorm 特性
• 全功能 ORM
• 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
• Create,Save,Update,Delete,Find 中钩子方法
• 支持 Preload、Joins 的预加载
• 事务,嵌套事务,Save Point,Rollback To Saved Point
• Context、预编译模式、DryRun 模式
• 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进
行 CRUD
• SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
• 复合主键,索引,约束
• Auto Migration
• 自定义 Logger
• 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
• 每个特性都经过了测试的重重考验
• 开发者友好
官方文档: https://gorm.io/zh_CN/docs/index.html
2.Gin 中使用 GORM
(1).安装
下载gorm以及对应的mysql驱动
方式一:直接go get
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
方式二: go mod 管理
如果使用 go mod 管理项目的话,在对应go文件中import , 然后 go mod tidy
//go文件import
import (
"gorm.io/gorm"
"gorm.io/driver/mysql"
)
//main.go文件目录下执行命令
go mod tidy
(2).Gin 中使用 Gorm 连接数据库
在 models 下面新建 core.go ,建立数据库链接
gorm文档: https://gorm.io/zh_CN/docs/index.html
package models
//连接数据库核心代码
import (
"fmt"
"gorm.io/gorm"
"gorm.io/driver/mysql"
)
//全局使用DB,就需要把DB定义成公有的
var DB *gorm.DB
var err error
//自动初始化数据库
func init() {
// 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情
dsn := "root:123456@tcp(127.0.0.1:3306)/gin?charset=utf8mb4&parseTime=True&loc=Local"
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println(err)
}
}
(3).定义操作数据库的模型
Gorm 官方提供了详细的: https://gorm.io/zh_CN/docs/models.html
虽然在 gorm 中可以指定字段的类型以及自动生成数据表,但是在实际的项目开发中,一般是先设计数据库表,然后去实现编码
在实际项目中定义数据库模型注意以下几点
1).结构体的名称必须首字母大写 ,并和数据库表名称对应。例如:表名称为 user 结构体
名称定义成 User,表名称为 article_cate 结构体名称定义成 ArticleCate
2).结构体中的字段名称首字母必须大写,并和数据库表中的字段一一对应。例如:结
构体中的 Id 和数据库中的 id 对应,Username 和数据库中的 username 对应,Age 和数据库中
的 age 对应,Email 和数据库中的 email 对应,AddTime 和数据库中的 add_time 字段对应
3).默认情况表名是结构体名称的复数形式(蛇形复数)如果结构体名称定义成 User,表示这个
模型默认操作的是 users 表
4).可以使用结构体中的自定义方法 TableName 改变结构体的默认表名称,如下
func (User) TableName() string {
return "user"
}
表示把 User 结构体默认操作的表改为 user 表
user 模型:
package models
type User struct { // 结构体首字母大写, 和数据库表名对应, 默认访问数据表users, 可以设置访问数据表的方法
Id int
Username string
Age int
Email string
AddTime int // 大驼峰命名
}
//配置数据库操作的表名称
func (User) TableName() string {
return "user"
}
更多约定参考官方文档:https://gorm.io/zh_CN/docs/conventions.html
[上一节][golang gin框架] 5.Cookie以及Session
[下一节][golang gin框架] 7.Gin GORM增删改查以及查询语句详解