使用 GORM(Go 的 ORM 库)连接数据库,并实现增删改查操作|青训营

147 阅读2分钟

GORM简介

GORM是一个Go编程语言中的ORM(对象关系映射)库,可以连接数据库并将数据库表中的数据映射到面向对象的模型中,从而简化了数据库操作。

GORM特点

1. 简单易用

GORM提供了简洁直观的API,使得操作数据库变得非常容易。无论是创建、读取、更新还是删除数据,都可以通过简单的方法调用实现。

2. 支持多种数据库

GORM支持多种常见的数据库系统,包括MySQL、PostgreSQL、SQLite等。这使得开发者可以在不同的项目中使用不同的数据库系统,而无需更改代码。跨不同数据库的兼容性,使得应用程序更具可移植性。

3.自动迁移

GORM可以自动创建数据库表,可以根据定义的模型自动创建、修改数据库表结构。这简化了数据库结构的管理,减少了手动处理数据库迁移的工作量。

4. 事务支持

GORM支持事务操作,保证了数据库操作的原子性和一致性。

5. 查询功能

GORM提供了强大的查询构建器,可以轻松地构建复杂的查询条件,从而减少了手动编写SQL查询的需求。

6. 自定义数据类型

GORM允许自定义数据类型,从而更好地映射特殊的数据库字段。

7. 批量操作

GORM支持批量插入、更新和删除操作,提高了操作效率。

GORM的使用过程

实现GORM增删改查操作前,需进行一系列操作。首先要安装GORM,随后连接数据库。GORM 官方支持的数据库类型有: MySQL, PostgreSQL, SQlite, SQL Server,下面以MySQL的连接举例:

import (
  "gorm.io/driver/mysql"
  "gorm.io/gorm"
)

 main() {
 dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?      charset=utf8mb4&parseTime=True&loc=Local"
  db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
}

在完成数据库的连接后,就可以自定义模型和创建适合项目的表格。最后便可实现GORM增删改查操作。下面为一具体实例:

package main

import (
"github.com/gin-gonic/gin"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)

var db *gorm.DB

func init() {
dsn := "root:123456@tcp(10.211.55.26:3306)/golang?charset=utf8"
db, _ = gorm.Open(mysql.Open(dsn), &gorm.Config{})
}

func (Student) TableName() string {
return "student"
}

type Student struct {
Id    int     `json:"id"`
Name  string  `json:"name"`
Age   int     `json:"age"`
Score float32 `json:"score"`
}

func creat(c *gin.Context) {
stu := Student{}
c.BindJSON(&stu)
db.Create(stu)
}

func find(c *gin.Context) {
stu := []Student{}
db.Find(&stu)
c.JSON(200, gin.H{
	"学生数据": stu,
})
}

func update(c *gin.Context) {
stu := Student{}
db.Model(stu).Where("id", 3).Update("name", "王武")
stu_up := []Student{}
db.Find(&stu_up)
c.JSON(200, gin.H{
	"修改后的学生数据": stu_up,
})
}

func delete(c *gin.Context) {
stu := Student{}
db.Where("id", 3).Delete(stu)
stu_de := []Student{}
db.Find(&stu_de)
c.JSON(200, gin.H{
	"删除后的学生数据": stu_de,
})
}

func main() {
r := gin.Default()
//在数据库中增加数据,curl -X POST "http://localhost:8080/creat" -d '{"id":2,"name":"李四","age":15,"score":95}'
r.POST("/creat", creat)
//在数据库中修改数据
r.GET("/update", update)
//在数据库中删除数据
r.GET("delete", delete)
//在数据库中查找数据
r.GET("/find", find)
r.Run()
}