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

125 阅读3分钟

1、简介

ORM

  Object-Relationl Mapping, 它的作用是映射数据库和对象之间的关系,方便我们在实现数据库操作的时候不用去写复杂的sql语句,把对数据库的操作上升到对于对象的操作。

gorm

  GORM(Golang Object Relational Mapping)是一个针对Go语言的轻量级对象关系映射(ORM)库。它提供了一种简单而强大的方式来处理Go应用程序与关系型数据库的交互。

以下是GORM的一些主要特点和功能:

  1. 结构体映射:GORM允许将Go语言的结构体(struct)与数据库表进行映射,从而实现对象和关系数据之间的转换。
  2. 数据库支持:GORM支持多种主流关系型数据库,如MySQL、PostgreSQL、SQLite、SQL Server等。
  3. CRUD操作:GORM提供了便捷的方法来执行常见的数据库操作,包括创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)等。
  4. 查询构建器:GORM提供了灵活的查询构建器,可以通过链式调用方法来构建复杂的查询条件,支持条件筛选、排序、分页等操作。
  5. 关联关系管理:GORM支持定义和处理表之间的关联关系,如一对一、一对多、多对多等关系,通过预加载或延迟加载的方式进行关联数据的查询。
  6. 事务管理:GORM提供了事务支持,可以确保在一系列数据库操作中的原子性和一致性。
  7. 钩子函数:GORM支持在数据操作前后触发各种钩子函数,可以用于实现数据验证、数据转换等自定义逻辑。

总而言之,GORM是一个功能丰富且易于使用的ORM库,它可以大大简化Go语言程序与数据库之间的交互,提高开发效率。

Github

  github.com/jinzhu/gorm

官方文档

  gorm.io/

2、如何使用Gorm

  只要四步就能上手gorm,可以尽情的沉浸在毫无技术含量的CRUD世界。

2.1 下载gorm库

  下载gorm库

go get -u github.com/jinzhu/gorm

  这是比较原始的方式,现在有了go mod,我们可以更方便的配置,甚至不用配置。

  写好代码,在文件下执行go build,go.mod会自动添加对于gorm的依赖包

github.com/jinzhu/gorm v1.9.10

  当然,也可以手动添加这个依赖。

2.2 创建DB连接

  建立数据库连接

package main

import (
  "github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

func main() {
	var err error
	db, connErr := gorm.Open("mysql", "root:rootroot@/dqm?charset=utf8&parseTime=True&loc=Local")
	if connErr != nil {
		panic("failed to connect database")
	}
	defer db.Close()
  db.SingularTable(true)
}

  gorm支持很多数据源包括PostgreSQLMySQL等。

  这里连接的是MySQL,所以需要引用"github.com/jinzhu/gorm/dialects/mysql"驱动。

  通过上面声明,已经获取数据库的连接。

  db.SingularTable(true)这句的作用后面会提到。

2.3 创建映射表结构的struct

  定义数据库表结构对应的struct

  比如这里我们要操作的是表test表,表结构如下

CREATE TABLE `test` (
  `id` bigint(20) NOT NULL,
  `name` varchar(5) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

  于是我们对应可以定义struct结构如下

type Test struct {
	ID   int64  `gorm:"type:bigint(20);column:id;primary_key"`
	Name string `gorm:"type:varchar(5);column:name"`
	Age  int    `gorm:"type:int(11);column:age"`
}

  每个字段后面的gorm是结构标记,可以用于声明对应数据库字段的属性。

  比如ID后面的约束为该字段为bigint(20)类型,对应列表为id,且该字段为主键。

  除此以外,还有更加丰富的标签定义参见官方文档:gorm.io/zh_CN/docs/…

2.4 CRUD

  有了前面三步的铺垫,下面就可以执行真正写数据库操作了。

"增"

test := &Test{
	ID:3,
	Name:"jackie",
	Age:18,
}
db.Create(test)

"删"

test := &Test{
	ID:3,
	Name:"jackie",
	Age:18,
}
db.Delete(test)

"改"

test := &Test{
	ID:   3,
	Name: "hello",
	Age:  18,
}
db.Model(&test).Update("name", "world")

"查"

var testResult Test
db.Where("name = ?", "hello").First(&testResult)
fmt.Println("result: ", testResult)