后端实践之GORM的增删改查 | 青训营

97 阅读4分钟

如何使用 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.1host 为: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 的操作,我很快便入门了数据库的增删改查。

我想跟大家说,数据库也就只是增删改查是最难的。将这个学会了,后面只会越学越快。当然进行实践才是最快的学习方法。