如何使用 GROM 来实现 Go 和 Mysql 的连接,并实现对于 Myqsl 的增删改查操作。
这里我将我学习的内容和实践整理成了文章分享给大家。
数据库连接
我们使用一个字符串来配置连接数据库的数据:
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&timeout=%s", username, password, host, port, Dbname, timeout)
在这个字符串中有许多的参数:
-
username:这是数据库的用户名。一般来说,本地的数据库用户名为root -
password:这是数据库的密码。 -
"tcp(%s:%d)":这部分表示使用TCP协议连接到指定的主机和端口。在本地的host为:127.0.0.1;host为:3306 -
Dbname:这部分表示的数据库的名称。 -
"charset=utf8mb4":这部分指定了字符集为UTF-8。 -
"parseTime=True":这部分告诉数据库驱动程序在处理时间戳时,将其解析为实际的time.Time类型。 -
"loc=Local":这部分指定了本地时区。 -
"timeout=%s":这部分指定了连接超时时间。我一般将超时时间设置为 10s 。
通过将这些值按正确的顺序插入到格式化字符串中,我们创建了一个完整的DSN字符串,用于建立MySQL数据库连接。
接下来就是连接数据库:
db, err := gorm.Open(mysql.Open(dsn))
在这里使用上面配置好的数据进行数据库的连接,如果连接成功 err 就会为空。然后就可以使用 db 来进行数据库的增删改查了。
数据库的使用
以一个 user 表为例,首先需要声明一个 User 的结构体对应表中的字段,然后建表:
type User struct {
ID uint
Name string
Age int
}
DB.AutoMigrate(&User{}) //建表
这样就建立好了一张 User 的表,十分的方便和快速。
往表中添加数据
如何向表中添加数据?
因为结构体和表息息相关,所以我一般是创建一个结构体实例,然后使用 GORM 的
Create函数来添加数据。
下面进行演示:
u1 := User{
Name: "ll",
Age: 20,
}
DB.Create(&u1)
在这里因为 ID 是主键,一般情况下表会自动赋值,所以就不需要我们去赋值了。
这样,我们就成功地实现了向表中添加数据。
从表中删除数据
表中的每一条数据的主键 ID 都是不一样的,所以可以根据主键来删除数据,这里用到的是 Delete 函数。
假设要删除刚刚创建的数据,它的 ID 为 1,那么首先需要实例化一个结构体并将 ID 赋值为 1,然后传给 Delete 函数进行删除。
var user User
DB.Delete(&user, 1)
这样我们就成功地删除了主键为 1 的那条数据。
查询表中的某条数据
根据某一个条件,将符合这个条件的数据从表中查询出,这是一个常用的方式。
这里需要用到 GORM 的 Find 函数,并将需要查询的条件写入即可。
var user User
DB.Find(&user, "name = ?", "ll")
fmt.Println(user)
在这里,使用了占位符 ?,有效的防止了 sql 注入的问题。
我们查询了名字叫 ll 的人,并将它=他的数据放在了 user 里面。
更新表中的某条数据
学会了查询操作,接下来就可以进行更新操作,也就是将表中的某条数据进行更新。
更新会使用到 Save 函数,我们先将某一条数据拆查询出来,将其中一部分数据进行更新后,使用 Save 函数,它就会自动的更新这条数据。
var user User
DB.Find(&user, "name = ?", "ll")
user.Age = 60
DB.Save(&user)
这样就成功地将名叫 ll 的人的年龄修改为了 60 岁。
总结
数据库的连接需要一些初始数据,需要我们去进行配置。数据库的增删改查仅仅只需要几个函数,当然这是最简单的增删改查操作,更加复杂的操作需要后续的学习继续的跟进。使用 GORM 的操作,我很快便入门了数据库的增删改查。
我想跟大家说,数据库也就只是增删改查是最难的。将这个学会了,后面只会越学越快。当然进行实践才是最快的学习方法。