【Go + Nuxt.js 搭建一个 BBS 系统】5. 使用gorm操作数据库
点击下面链接购买后可获取本课程完整源码,同时提供高大上的在线IDE开发环境,边看教程边动手。
- 购买地址:https://www.shiyanlou.com/courses/1436
- 购买九折优惠邀请码:
ZHwfIjb1
作者简介
大猫猫,互联网公司老码农、不折腾不舒服斯基,多年千万日活服务端研发和架构经验。关注公众号查看更多技术干货:
实验介绍
实验内容
认识Go语言ORM
框架:gorm,并学会如何使用gorm
进行数据库操作。
知识点
- 如何配置数据库链接
- 如何使用GORM定义数据模型
- 使用GORM完成增删改查
预备知识
- 如何定义结构体
- 结构体字段的tag使用
认识gorm
gorm 是一款强大且优秀的Go语言 orm 框架。主要功能你如下:
- 全功能 ORM (无限接近)
- 关联 (Has One, Has Many, Belongs To, Many To Many, 多态)
- 钩子 (在创建/保存/更新/删除/查找之前或之后)
- 预加载
- 事务
- 复合主键
- SQL 生成器
- 数据库自动迁移
- 自定义日志
- 可扩展性, 可基于 GORM 回调编写插件
- 所有功能都被测试覆盖
- 开发者友好
快速入门
添加 gorm 依赖
go get -u github.com/jinzhu/gorm
模型定义
type User struct {
Id int64 `gorm:"PRIMARY_KEY;AUTO_INCREMENT"` // 编号,主键、自增长
Name string `gorm:"size:32;not null"` // 用户名,长度32,不可空
Email string `gorm:"size:128;not null"` // 邮箱,长度128,不可控
}
模型的每个字段都可以添加标记(Tag),通过 Tag
可以配置字段的属性,gorm
支持以下标记:
标记(Tag) | 描述 |
---|---|
Column | 指定列名 |
Type | 指定列数据类型 |
Size | 指定列大小, 默认值255 |
PRIMARY_KEY | 将列指定为主键 |
UNIQUE | 将列指定为唯一 |
DEFAULT | 指定列默认值 |
PRECISION | 指定列精度 |
NOT NULL | 将列指定为非 NULL |
AUTO_INCREMENT | 指定列是否为自增类型 |
INDEX | 创建具有或不带名称的索引, 如果多个索引同名则创建复合索引 |
UNIQUE_INDEX | 和 INDEX 类似,只不过创建的是唯一索引 |
EMBEDDED | 将结构设置为嵌入 |
EMBEDDED_PREFIX | 设置嵌入结构的前缀 |
- | 忽略此字段 |
连接数据库
gorm
支持 sqlite
,mysql
,postgreSql
,mssql
,所以在连接数据库的时候需要指定你的数据库类型,下面我们以mysql
为例进行讲解。
首先我们连上mysql创建数据库:test_db,创建数据库命令如下:
注意:实验楼环境默认情况下mysql服务是未启动的,启动mysql服务命令为:
sudo service mysql start
,实验楼mysql默认是没有密码的。
CREATE DATABASE `test_db` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
接下来编写Go代码,使用gorm
连接数据库:
package main
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
func main() {
// 连接数据库,用户名:root,密码:没有密码,密码请根据实际情况设定
db, err := gorm.Open("mysql", "root@tcp(localhost:3306)/test_db?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
panic("failed to connect database")
}
defer db.Close()
}
首先我们需要将 gorm
和 mysql
支持引入进来,即:
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
那么链接数据库就变得很简单了, 只需要调用 gorm.Open
方法即可,该方法有两个参数,第一个参数是指定数据库类型,第二个参数是数据库的链接。这里我们将数据库类型设定为 mysql
,mysql 的链接格式为:
username:password@tcp(数据库地址:端口)/数据库名称
gorm.Open
有两个返回值,第一个返回值就是数据库链接,第二个返回值是错误信息,当错误信息为空时表示数据库连接成功,连接成功之后我们即可正常操作数据库啦。
另外,gorm 还提供了AutoMigrate
功能,他会根据我们结构体中的定义来自动为我们创建表,开启只需要调用AutoMigrate
方法,并且将我们的结构体传入进去即可,代码如下:
// 自动根据结构体创建
db.AutoMigrate(&User{})
数据库增删改查
插入一条数据
db.Create(&User{
Name: "小明",
Email: "xiaoming@gmail.com",
})
更新数据
var user User
db.Where("name = ?", "小明").First(&user)
fmt.Println("小明的邮箱为:" + user.Email)
// 重新赋值,然后更新
user.Email = "xiaoming2@gmail.com"
db.Save(user)
查询数据
查询单条数据:
var user User
db.Where("name = ?", "小明").First(&user)
fmt.Println("小明的邮箱为:" + user.Email)
查询列表数据:
var users []User
db.Find(&users)
fmt.Println("总用户数:", len(users))
删除数据
db.Where("name = ?", "小明").Delete(&User{})
扩展阅读
gorm
的功能非常强大,我们这里所讲的只是gorm
最基本的使用方法,如果想深入的了解gorm
可以去他的官网查看更详细的文档,当然更欢迎评论区留言交流。
gorm
官网:http://gorm.io
文章转载请注明出处,原文链接:https://mlog.club/topic/647