一、GORM 简单介绍
GORM 是 golang 的一个 orm 框架。它是一个单独的 ORM 框架。相比 beego 自带的 orm 框 架,语法要更友好一些,关联查询更简单、功能更强大一些。
简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系 映射"(Object/Relational Mapping) 的缩写
二、beego 中使用GORM
1、安装
go get -u github.com/jinzhu/gorm
2、Beego 中使用 Gorm 连接数据库
在 models 下面新建 core.go ,建立数据库链接
把连接数据库的代码封装成一个工具
package models import ( "github.com/astaxie/beego" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" ) // 声明全局的变量,外面才能访问 // 下面是init函数 var DB *gorm.DB var err error func init() { // 和数据库建立连接 DB, err = gorm.Open("mysql", "root:123456@/beego?charset=utf8&parseTime=True&loc=Local") if err != nil { beego.Error() } }
3、关闭数据库链接
找到 main.go 引入 models 模块, 在 main 方法执行完毕后关闭数据库链接
package main import ( "beegogorm/models" _ "beegogorm/routers" "github.com/astaxie/beego" ) func main() { beego.Run() defer models.DB.Close() //关闭数据库连接 }
4、定义操作数据库的模型
Gorm 官方给我们提供了详细的:
https://gorm.io/zh_CN/docs/models.html
虽然在 gorm 中可以指定字段的类型以及自动生成数据表,但是在实际的项目开发中,我们 是先设计数据库表,然后去实现编码的。
func (User) TableName() string { return "user" }
定义 user 模型:
package models type User struct { Id int Username string Age int Email string AddTime int } //定义结构体操作的数据库表 func (User) TableName() string { return "user" }
三、Beego GORM CURD
找到要操作数据库表的控制器,然后引入 models 模块。
package controllers import ( "beegogorm/models" "time" "github.com/astaxie/beego" ) type UserController struct { beego.Controller } func (c *UserController) Get() { //1、查询一条数据 // user := models.User{Username: "lisi"} // models.DB.Find(&user) //2、查询所有数据 user := []models.User{} models.DB.Find(&user) c.Data["json"] = user c.ServeJSON() } func (c *UserController) Add() { // c.Ctx.WriteString("增加数据") user := models.User{ Username: "哈哈111", Age: 26, Email: "hahha.qq.com", AddTime: int(time.Now().Unix()), } models.DB.Create(&user) c.Ctx.WriteString("增加数据成功") } func (c *UserController) Edit() { //1、查找id=5的数据 user := models.User{Id: 5} models.DB.First(&user) //2、执行修改 user.Username = "王五" models.DB.Save(&user) c.Ctx.WriteString("修改数据成功") } func (c *UserController) Delete() { user := models.User{Id: 4} models.DB.Delete(&user) c.Ctx.WriteString("删除数据成功") }