一、Gorm 官方文档
Gorm 官方文档: https://v1.gorm.io/zh_CN/docs/
二、Golang Beego使用grom
1、安装gorm
go get -u github.com/jinzhu/gorm
2、Golang Beego中使用 Gorm 连接数据库
在 models 下面新建 db.go ,建立数据库链接
package models
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
var DB *gorm.DB
func init() {
DB,_=gorm.Open("mysql","root:123456@/beegodbcharset=utf8&parseTime=True&loc=L ocal")
}
3、关闭数据库链接
找到 main.go 引入 models 模块, 在 main 方法执行完毕后关闭数据库链
package main
import (
"demo/models"
"github.com/astaxie/beego"
)
func main() {
beego.Run()
defer models.DB.Close()
}
4、定义操作数据库的模型
Gorm 官方给我们提供了详细的说明:https://v1.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 字段对应
package models
type User struct {
Id int
Phone string
Password string
AddTime int
LastIp string
Email string
Status int
}
func (User) TableName() string {
return "user"
}
3、默认情况表名是结构体名称的复数形式。
如果我们的结构体名称定义成 User,表示这个 模型默认操作的是 users 表。
4、我们可以使用结构体中的自定义方法 TableName 改变结构体的默认表名称
func (User) TableName() string {
return "user"
}
表示把 User 结构体默认操作的表改为数据库的 user 表
更多模型定义请查看网址:https://v1.gorm.io/zh_CN/docs/conventions.html
三、Beego GORM CURD
1、创建
增加成功后会返回刚才增加的记录
user := models.User{
Username: "gorm",
Age: 18,
Email: "gorm@qq.com",
}
models.DB.Create(&user)
2、查询
根据主键查询第一条记录
user := models.User{
}
db.First(&user)
根据主键查询最后一条记录
user := models.User{
}
db.Last(&user)
查询所有的记录
users := []models.User{
}
db.Find(&users)
查询指定的某条记录(仅当主键为整型时可用)
user := models.User{
}
db.First(&user, 10)
或者
user := models.User{
Id:10}
db.Find(&user)
Where 条件
// 获取第一个匹配的记录
db.Where("name = ?", "jinzhu").First(&user)
SELECT * FROM users WHERE name = 'jinzhu' limit 1;
// 获取所有匹配的记录
db.Where("name = ?", "jinzhu").Find(&users)
SELECT * FROM users WHERE name = 'jinzhu';
// <>
db.Where("name <> ?", "jinzhu").Find(&users)
SELECT * FROM users WHERE name <> 'jinzhu';
// IN
db.Where(