80f4a7ed8a1371dbd74192a67b589f6b
Gin(十一):配合orm框架-gorm

随着项目的不断扩大,总有一天,项目中的表和表中的字段多的数不胜数,如果此时仍旧使用 SQL 语言来执行增删改查,务必会带来很多繁琐的事情,比如说我们要添加一个字段有十多个的结构体,要把结构体中的每个属性都要写一遍。极大的降低了开发速度,也会引入一些错误,所以我们要引入一些框架来对数据库进行管理,方便我们完成项目。这里我们介绍一下 gorm

🥨gorm

gormGo 语言中比较知名的 orm 框架之一,在 Github 上的有 14.6 K stars。gorm 对于常见的功能基本都已实现。
gin 中添加 gorm 是非常简单的。

首先打开我们的 initDB 文件夹。
将原来 sql.Open 改为 gorm.Open 同时引入 gorm , 同时对 Db 的定义类型进行更改,*gorm.DB
具体代码如下:

package initDB

import (
    _ "github.com/go-sql-driver/mysql"
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/mysql"
    "log"
)

var Db *gorm.DB

func init() {
    var err error
    Db, err = gorm.Open("mysql", "root:1234@tcp(127.0.0.1:3306)/ginhello")
    if err != nil {
        log.Panicln("err:", err.Error())
    }
}

此时我们的对框架的引入就已经完成了。

因为我们将 Db 的属性进行了修改,此时的 article.go 中出现了错误。

所以我们修改,利用 gormapi 来进行。

🍗实现增删改查

增加

增加方法,之前使用 SQL 语言来实现添加的,如下:

result, e := initDB.Db.Exec("insert into ` article` (type, content) values (?, ?);", article.Type, article.Content)

现在我们要通过框架来实现这一个过程。

create := initDB.Db.Create(&article)

是不是很简单了?

查询单个

通过 article.Id 传入限制条件,该方法仅仅是用于 主键为 int 类型时。

initDB.Db.First(&article, article.Id)
return article

查询所有

var articles []Article
initDB.Db.Find(&articles)
return articles

删除

initDB.Db.Delete(article)

通过以上的一些方法可以看出来,基本对之前的增删改查代码有了极大的缩短,大大的减少了错误的发生。

此时就可以运行我们的代码,通过 .http 也好,通过单元测试也好,但是一运行就会报错。报错如下:

Error 1146: Table 'ginhello.articles' doesn't exist 
top Created with Sketch.