GORM

一、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("删除数据成功")
}

  

原文地址:https://www.cnblogs.com/yzg-14/p/13417370.html