GORM
GORM
1 GORM简单介绍
GORM是Golang的一个orm框架。简单说,ORM就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射" ( Object/Relational Mapping)的缩写。使用ORM框架可以让我们更方便的操作数据库。
GORM官方支持的数据库类型有:MySQL, PostgreSQL, sQlite, SQL Server
官方文档https://gorm.io/zh_CN/docs/index.html
2 连接到数据库(MySql)
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
// 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情
dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
}
3 将连接定义成全局的
/*
项目中创建 db 文件夹
*/
在client.go中写入
package db
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var DB *gorm.DB
var err error
func init() {
dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println(err)
}
}
/*
将DB定义成公有的,并且将数据库连接写入init中,只要引入了就会创建连接对象
*/
4 定义操作数据表的结构体,文件名尽量和表名相同
// 在db下创建一个models文件夹用来管理表
user表结构
user.go
/*
结构体中需要有数据表中的所有字段
字段第一个字母需要大写 方便外部使用
add_time 在结构体中要写成 AddTime 用驼峰命名
字段类型也需要对应
默认操作的是结构体名称对应的复数的表 也就是说 如果结构体是User那么操作的表就是users,和数据库中的user不一样就会有问题,所以需要写一个TableName的方法,指定操作的表
*/
package models
type User struct { // 默认表名是 `users`
Id int
Username string
Age int
Email string
AddTime int
}
// 指定操作的表
func (u User) TableName() string {
return "user"
}
小结
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"
}