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

      

  • 相关阅读:
    时间序列数据库(TSDB)初识与选择(InfluxDB、OpenTSDB、Druid、Elasticsearch对比)
    Prometheus COMPARISON TO ALTERNATIVES
    认真分析mmap:是什么 为什么 怎么用
    Flume学习之路 (二)Flume的Source类型
    Flume学习之路 (一)Flume的基础介绍
    Spark学习之路 (二十一)SparkSQL的开窗函数和DataSet
    Spark学习之路 (二十)SparkSQL的元数据
    CentOS 7的安装
    Spark学习之路 (十九)SparkSQL的自定义函数UDF
    Spark学习之路 (十八)SparkSQL简单使用
  • 原文地址:https://www.cnblogs.com/yzg-14/p/13417370.html
Copyright © 2020-2023  润新知