zoukankan      html  css  js  c++  java
  • Beego 结合 GORM 操作 Mysql 数据库

    Beego 结合 GORM 操作 Mysql 数据库
    GORM 简单介绍
    GORM 是 golang 的一个 orm 框架。它是一个单独的 ORM 框架。相比 beego 自带的 orm 框 架,
    语法要更友好一些,关联查询更简单、功能更强大一些。
    简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,
    是"对象-关系 映射"(Object/Relational Mapping) 的缩写
    Gorm 官方文档

    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("删除数据库成功")
    
    }
    
  • 相关阅读:
    【转】final 关键字
    【转】安装Fiddler2+JsonViewer插件
    【转】SAP SD定价技术分析
    【转】SAP PP 顾问面试考试试题及资料
    【转】Hibernate数据过滤
    【转】与计划有关的生产数据
    【转】销售凭证类别
    将MyEclipse中的项目导入到Eclipse中报错的解决放法,将项目打war包部署服务器
    查看Android下生成的.db数据库
    删除快速启动栏的快捷方式 pplive
  • 原文地址:https://www.cnblogs.com/linqiaobao/p/14266942.html
Copyright © 2011-2022 走看看