Bootstrap

go语言Gin框架的学习路线(七)

 GORM入门(基于七米老师)

目录

GORM入门

安装

连接数据库

连接MySQL

连接PostgreSQL

连接Sqlite3

连接SQL Server

我们搞一个连接MySQL的例子

创建数据库

GORM操作MySQL


GORM是一个流行的Go语言ORM(对象关系映射)库,它提供了一种方法来操作数据库,使得开发者可以用Go语言的代码来操作数据库,而不需要编写SQL语句。GORM支持多种数据库,包括MySQL、PostgreSQL、SQLite、SQL Server等

以下是GORM的一些主要特性:

  1. 链式操作:GORM的链式操作使得代码更加简洁和易于阅读。
  2. 自动迁移:GORM可以自动检测模型的变化并更新数据库结构。
  3. 事务支持:GORM支持事务,确保数据的一致性。
  4. 关联模型:GORM支持多种关联关系,如一对一、一对多、多对多等。
  5. 预加载:GORM支持预加载关联数据,减少数据库查询次数。
  6. 条件查询:GORM提供了丰富的条件查询接口,方便进行复杂的数据查询。
  7. 钩子函数:GORM支持在数据的创建、更新、删除等操作前后执行自定义的代码。
  8. 插件系统:GORM有一套插件系统,可以扩展其功能。

使用GORM,你可以定义一个结构体来表示数据库中的一个表,然后通过这个结构体来操作数据库中的数据。

安装

go get -u github.com/jinzhu/gorm

连接数据库

按如下方式导入需要的数据库驱动即可

import _ "github.com/jinzhu/gorm/dialects/mysql"
import _ "github.com/jinzhu/gorm/dialects/postgres"
import _ "github.com/jinzhu/gorm/dialects/sqlite"
import _ "github.com/jinzhu/gorm/dialects/mssql"

在Go语言中,import语句用来导入包以便在代码中使用。在上述代码中import语句使用了下划线_作为别名,这是一种特殊的用法,表示导入包是为了执行包的初始化代码,而不是为了在当前文件中直接使用包中的导出符号(函数、类型、变量等)。使用这种方式导入方言包,通常是在应用程序的入口文件中进行,例如main.go或应用程序的配置文件中。这样做的好处是,即使你的应用程序只使用一种数据库,你也可以通过简单地导入相应的方言包来支持多种数据库,而不需要修改大量的代码。此外,这也有助于保持代码的组织性和可维护性

连接MySQL

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

func main() {
  db, err := gorm.Open("mysql", "user:password@(localhost)/dbname?charset=utf8mb4&parseTime=True&loc=Local")
  defer db.Close()
}

这段代码的主要目的是建立与MySQL数据库的连接。如果连接成功,db变量将包含数据库的连接对象,你可以使用这个对象来进行数据库操作,如查询、更新、插入和删除等。如果连接失败,err变量将包含错误信息,你可以检查这个变量来了解连接失败的原因。

连接PostgreSQL

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

func main() {
  db, err := gorm.Open("postgres", "host=myhost port=myport user=gorm dbname=gorm password=mypassword")
  defer db.Close()
}

这段代码的主要目的是建立与PostgreSQL数据库的连接。如果连接成功,db变量将包含数据库的连接对象,你可以使用这个对象来进行数据库操作,如查询、更新、插入和删除等。如果连接失败,err变量将包含错误信息,你可以检查这个变量来了解连接失败的原因。 

连接Sqlite3

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

func main() {
  db, err := gorm.Open("sqlite3", "/tmp/gorm.db")
  defer db.Close()
}

这段代码的主要目的是建立与SQLite数据库的连接。如果连接成功,db变量将包含数据库的连接对象,你可以使用这个对象来进行数据库操作,如查询、更新、插入和删除等。如果连接失败,err变量将包含错误信息,你可以检查这个变量来了解连接失败的原因。 

连接SQL Server

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

func main() {
  db, err := gorm.Open("mssql", "sqlserver://username:password@localhost:1433?database=dbname")
  defer db.Close()
}

这段代码的主要目的是建立与Microsoft SQL Server数据库的连接。如果连接成功,db变量将包含数据库的连接对象,你可以使用这个对象来进行数据库操作,如查询、更新、插入和删除等。如果连接失败,err变量将包含错误信息,你可以检查这个变量来了解连接失败的原因。 

我们搞一个连接MySQL的例子

创建数据库

在使用GORM前手动创建数据库db1

CREATE DATABASE db1;
GORM操作MySQL
package main

import (
	"fmt"

	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql" // 导入MySQL方言包,注册MySQL方言
)

// UserInfo 定义用户信息的结构体
type UserInfo struct {
	ID     uint   // 用户ID
	Name   string // 用户姓名
	Gender string // 用户性别
	Hobby  string // 用户爱好
}

func main() {
	// 使用GORM打开与MySQL数据库的连接
	db, err := gorm.Open("mysql", "root:root1234@(127.0.0.1:13306)/db1?charset=utf8mb4&parseTime=True&loc=Local")
	// 检查连接是否有误,如果有误则打印错误并终止程序
	if err != nil {
		panic(err)
	}
	defer db.Close() // 确保在函数结束时关闭数据库连接

	// 使用AutoMigrate自动迁移UserInfo结构体到数据库,如果表不存在则创建
	db.AutoMigrate(&UserInfo{})

	// 创建两个用户信息实例
	u1 := UserInfo{1, "亨亨", "男", "打篮球"}
	u2 := UserInfo{2, "小欣", "女", "打羽毛球"}
	// 使用Create方法创建记录到数据库中
	db.Create(&u1)
	db.Create(&u2)

	// 查询操作:查询第一条记录
	var u = new(UserInfo)
	db.First(u)            // 查询结果赋值给变量u
	fmt.Printf("%#v\n", u) // 打印查询结果

	// 根据条件查询记录
	var uu UserInfo
	db.Find(&uu, "hobby=?", "打羽毛球") // 查询爱好为足球的用户信息
	fmt.Printf("%#v\n", uu)       // 打印查询结果

	// 更新操作:更新用户爱好为双色球
	db.Model(&u).Update("hobby", "双色球") // 通过Model指定更新对象,然后调用Update进行更新

	// 删除操作:删除指定的用户记录
	db.Delete(&u) // 通过Delete删除u指向的记录
}

这段代码是一个使用Go语言和GORM库来操作MySQL数据库的示例。下面是对代码的理解和简单记忆的方法:

  1. 包导入

    • 导入GORM库和MySQL方言包,使用下划线表示不直接使用包的内容,而是执行包的初始化代码。
  2. 定义结构体

    • UserInfo结构体代表数据库中的用户信息表,包含ID、姓名、性别和爱好四个字段。
  3. 主函数

    • main()是程序的入口点。
  4. 数据库连接

    • 使用gorm.Open函数连接到MySQL数据库,如果连接失败,使用panic终止程序。
  5. 自动迁移

    • AutoMigrate方法自动创建或修改数据库表以匹配UserInfo结构体。
  6. 创建记录

    • 创建两个UserInfo实例u1u2,然后使用Create方法将它们添加到数据库中。
  7. 查询记录

    • 使用First方法查询并打印数据库中的第一条记录。
    • 使用Find方法根据条件查询并打印特定记录(爱好为“打羽毛球”的用户)。
  8. 更新记录

    • 使用ModelUpdate方法更新指定记录的爱好字段为“双色球”。
  9. 删除记录

    • 使用Delete方法删除指定的记录。

简单记忆方法

  • 包导入:GORM和方言包。
  • 结构体:定义了数据库表的结构。
  • 连接gorm.Open连接数据库。
  • 迁移AutoMigrate创建或更新表。
  • Create添加记录。
  • FirstFind查询记录。
  • Model.Update更新记录。
  • Delete删除记录。

记住CRUD(创建Create、读取Read、更新Update、删除Delete)操作,这是数据库操作的基本流程。通过这个流程,你可以快速回忆起代码的各个部分。

  期末放假自学Gin框架,希望我们可以一起学习!

;