beego mysql主从_Beego 结合 GORM 操作 Mysql 数据库

GORM 简单介绍

GORM 是 golang 的一个 orm 框架。它是一个单独的 ORM 框架。相比 beego 自带的 orm 框 架,

语法要更友好一些,关联查询更简单、功能更强大一些。

简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,

是"对象-关系 映射"(Object/Relational Mapping) 的缩写1.3. 模型 · GORM 中文文档​gorm.book.jasperxu.com

beego 中使用 GORM

go get -u github.com/jinzhu/gorm

Beego 中使用 Gorm 连接数据库

在 utils 下面新建 db.go ,建立数据库链接

package utils

import (

"github.com/jinzhu/gorm"

"github.com/astaxie/beego"

_ "github.com/jinzhu/gorm/dialects/mysql"

)

var DB *gorm.DB

var err error

func init() {

DB,err = gorm.Open("mysql","root:123456@(127.0.0.1:3306)/beego?

charset=utf8")

if err != nil {

beego.Error(err)

return

}

}

找到 main.go 引入 utils 模块, 在 main 方法执行完毕后关闭数据库链接

package main

import (

"firethorn/beego/utils"

"firethorn/beego/controllers"

_ "firethorn/beego/routers"

"github.com/astaxie/beego"

)

func main() {

beego.SetLogger("file",`{"filename":"logs/test.log"}`)

beego.ErrorController(&controllers.ErrorController{})

beego.Run()

defer utils.DB.Close()

}

定义操作数据库的模型

Gorm 官方给我们提供了详细的: https://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 字段对应

3、默认情况表名是结构体名称的复数形式。如果我们的结构体名称定义成 User,表示这个 模型默认操作的是 users 表。

4、我们可以使用结构体中的自定义方法 TableName 改变结构体的默认表名称,如下:

func (User) TableName() string {

return "user"

}

定义 user 模型:

在models下新建user.go文件

package models

import (

_ "github.com/jinzhu/gorm"

)

type User struct {

ID int

Name string

Age int

AddTime int

}

func (User) TableName() string{

return "user"

}

关联路由

在routers目录下的router文件定义路由

package routers

import (

"firethorn/beego/controllers"

"github.com/astaxie/beego"

)

func init() {

beego.Router("/mysql",&controllers.MySqlController{})

beego.Router("/mysql/add",&controllers.MySqlController{},"get:Add")

beego.Router("/mysql/update",&controllers.MySqlController{},"get:Update")

beego.Router("/mysql/delete",&controllers.MySqlController{},"get:Delete")

}

控制器执行CRUD

在controlers目录下新建一个mysql.go文件

package controllers

import (

"time"

"firethorn/beego/models"

"firethorn/beego/utils"

"github.com/astaxie/beego"

)

type MySqlController struct {

beego.Controller

}

//查询

func (c *MySqlController) Get() {

user := []models.User{}

// user := []utils.User{}

utils.DB.Find(&user)

c.Data["json"] = user

c.ServeJSON()

c.TplName = "mysql.html"

}

//新增

func (c *MySqlController) Add() {

user := models.User{

Name:"张三",

Age:22,

AddTime:int(time.Now().Unix()),

}

utils.DB.Create(&user)

c.Ctx.WriteString("增加数据成功")

}

//更新

func (c *MySqlController) Update() {

user := models.User{ID:4}

utils.DB.First(&user)

user.Name = "周华建"

utils.DB.Save(&user)

c.Ctx.WriteString("更新数据成功")

}

//删除

func (c *MySqlController) Delete() {

user := models.User{ID:5}

utils.DB.Delete(&user)

c.Ctx.WriteString("删除数据库成功")

}

参考文档:晓智博客​blog.xiaozhi.shopa46f53feadcaa448c49f04d21ac1267a.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值