数据库对我们来说是十分重要的,每一个应用型程序都会使用到,学习如何高效去操作数据库实现增删改查操作也是日常开发的重点。在Java语言中,我们通常会使用JDBC、mybatis操作数据库,而今天要介绍的是使用GO语言的GORM框架对数据库进行增删改查操作。
一.GORM简介
GORM是一个轻量级的ORM库,旨在连接数据库并实现增删改查操作。它能够让开发者以对象关系映射(ORM)的方式与多种数据库进行交互,包括MySQL、PostgreSQL、SQLite等。在本篇文章中,我们将学习如何使用GORM连接数据库并实现增删改查操作。
二.GORM使用
首先,我们需要在Go项目中使用GORM,要到官网gorm.io/zh_CN/docs/…
go get -u gorm.io/gorm
安装好GORM框架后,需要在Go代码前导入以下包。如果我们使用的是MySQL数据库,直接按照下列代码就好,如果是使用的sqlserver或者其它数据库,则需要在driver驱动后更换成要使用的数据库名称。
import (
"gorm.io/driver/mysql" //使用的是MySQL数据库
"gorm.io/gorm"
)
导入完所需的包后,则需建立数据库连接。在Java语言中,与数据库建立连接有四部分组成,分别是driver、url、username、password,分别代表的是数据库连接驱动(当前使用的是MySQL数据库)、数据库连接地址、数据库用户名、数据库密码,而GORM框架也不例外,也包含这四部分。username是数据库用户名,password是数据库密码,tcp(127.0.0.1:3306)是数据库连接地址(当前是本地的MySQL数据库),database是数据库名称。
func main() {
// 连接数据库
dsn := "username:password@tcp(127.0.0.1:3306)/database?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("无法连接数据库")
}
defer db.Close()
}
在GORM中,我们需要定义模型结构来映射数据库表。以用户表(User)为例,有两个字段,分别是姓名(name),邮箱(email),下面是一个用户表的模型结构:
type User struct {
gorm.Model
Name string
Email string
}
我们可以使用 AutoMigrate 方法来创建表和进行迁移,这会根据模型结构自动创建名为users的表。
//创建表和进行迁移
db.AutoMigrate(&User{})
1.新增用户
调用db中Create方法,传入user参数。
func createUser(db *gorm.DB, name, email string) {
user := User{Name: name, Email: email}
db.Create(&user)
}
2.查询用户
调用db中First方法,传入user,id两个参数。
func getUserByID(db *gorm.DB, id uint) (User, error) {
var user User
result := db.First(&user, id)
if result.Error != nil {
return user, result.Error
}
return user, nil
}
3.更新用户
更新用户分为两步,首先需要调用getUserByID将要更新的用户查询出来,再调用db中Save方法,传入user参数。
func updateUser(db *gorm.DB, id uint, email string) error {
user, err := getUserByID(db, id)
if err != nil {
return err
}
user.Email = email
result := db.Save(&user)
return result.Error
}
4.删除用户
删除用户调用db中Delete,传入User{}、id两个参数。
func deleteUser(db *gorm.DB, id uint) error {
result := db.Delete(&User{}, id)
return result.Error
}
三.完整示例代码
下列代码主要是对GORM连接数据库实现增删改查操作,包括导包、建立数据库连接、定义模型结构映射数据库表、定义方法对数据库表进行增删改查操作。
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type User struct {
gorm.Model
Name string
Email string
}
func main() {
// 连接数据库
dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("无法连接数据库")
}
defer db.Close()
// 创建表和进行迁移
db.AutoMigrate(&User{})
//创建记录
createUser(db, "xiaoming", "xiaoming@163.com")
//查询记录
user, err := getUserByID(db, 1)
if err != nil {
panic(err)
}
fmt.Println(user.Name, user.Email)
// 更新记录
err = updateUser(db, 1, "xiaoming666@163.com")
if err != nil {
panic(err)
}
// 删除记录
err = deleteUser(db, 1)
if err != nil {
panic(err)
}
}
func createUser(db *gorm.DB, name, email string) {
user := User{Name: name, Email: email}
db.Create(&user)
}
func getUserByID(db *gorm.DB, id uint) (User, error) {
var user User
result := db.First(&user, id)
if result.Error != nil {
return user, result.Error
}
return user, nil
}
func updateUser(db *gorm.DB, id uint, email string) error {
user, err := getUserByID(db, id)
if err != nil {
return err
}
user.Email = email
result := db.Save(&user)
return result.Error
}
func deleteUser(db *gorm.DB, id uint) error {
result := db.Delete(&User{}, id)
return result.Error
}