GORM入门(基于七米老师)
目录
GORM是一个流行的Go语言ORM(对象关系映射)库,它提供了一种方法来操作数据库,使得开发者可以用Go语言的代码来操作数据库,而不需要编写SQL语句。GORM支持多种数据库,包括MySQL、PostgreSQL、SQLite、SQL Server等。
以下是GORM的一些主要特性:
- 链式操作:GORM的链式操作使得代码更加简洁和易于阅读。
- 自动迁移:GORM可以自动检测模型的变化并更新数据库结构。
- 事务支持:GORM支持事务,确保数据的一致性。
- 关联模型:GORM支持多种关联关系,如一对一、一对多、多对多等。
- 预加载:GORM支持预加载关联数据,减少数据库查询次数。
- 条件查询:GORM提供了丰富的条件查询接口,方便进行复杂的数据查询。
- 钩子函数:GORM支持在数据的创建、更新、删除等操作前后执行自定义的代码。
- 插件系统: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数据库的示例。下面是对代码的理解和简单记忆的方法:
包导入:
- 导入GORM库和MySQL方言包,使用下划线表示不直接使用包的内容,而是执行包的初始化代码。
定义结构体:
UserInfo
结构体代表数据库中的用户信息表,包含ID、姓名、性别和爱好四个字段。
主函数:
main()
是程序的入口点。
数据库连接:
- 使用
gorm.Open
函数连接到MySQL数据库,如果连接失败,使用panic
终止程序。
- 使用
自动迁移:
AutoMigrate
方法自动创建或修改数据库表以匹配UserInfo
结构体。
创建记录:
- 创建两个
UserInfo
实例u1
和u2
,然后使用Create
方法将它们添加到数据库中。
- 创建两个
查询记录:
- 使用
First
方法查询并打印数据库中的第一条记录。 - 使用
Find
方法根据条件查询并打印特定记录(爱好为“打羽毛球”的用户)。
- 使用
更新记录:
- 使用
Model
和Update
方法更新指定记录的爱好字段为“双色球”。
- 使用
删除记录:
- 使用
Delete
方法删除指定的记录。
- 使用
简单记忆方法:
- 包导入:GORM和方言包。
- 结构体:定义了数据库表的结构。
- 连接:
gorm.Open
连接数据库。 - 迁移:
AutoMigrate
创建或更新表。 - 增:
Create
添加记录。 - 查:
First
和Find
查询记录。 - 改:
Model.Update
更新记录。 - 删:
Delete
删除记录。
记住CRUD(创建Create、读取Read、更新Update、删除Delete)操作,这是数据库操作的基本流程。通过这个流程,你可以快速回忆起代码的各个部分。
期末放假自学Gin框架,希望我们可以一起学习!