特性
- 全功能 ORM
- 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
- Create,Save,Update,Delete,Find 中钩子方法
- 支持
Preload、Joins的预加载 - 事务,嵌套事务,Save Point,Rollback To Saved Point
- Context、预编译模式、DryRun 模式
- 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
- SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
- 复合主键,索引,约束
- Auto Migration
- 自定义 Logger
- 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
- 每个特性都经过了测试的重重考验
- 开发者友好
安装依赖
首先在终端输入这两行命令下载依赖包
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
若之前没设置过代理且发生超时请先设置代理(go语言go get指令超时|青训营笔记 - 掘金 (juejin.cn))
创建连接
依赖配置完成后即可使用gorm连接数据库了
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
dsn := "账号名:密码@tcp(127.0.0.1:3306)/数据库名?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
将我代码块中的账号名,密码,数据库名替换成自己的就可以了
创建数据表的映射结构
不同于java mybatis的继承接口指定操作数据表, gorm的指定是通过实体类的
type User struct {
ID uint
Name string
Gender uint
Phone uint
}
GORM 通常使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,有关蛇形命名法相关可自行查阅. 此时操控表为users,主键为id,其他字段为name, gender,phone
CRUD
增
user := User{Name: "sam", Gender: 0, Phone: 1234567}
result := db.Create(&user)
if result.Error != nil {
panic(err)
}
调用create方法并将创建的user对象地址传入来进行增加
删
db.Delete(&User{}, 10)
删除异曲同工,此处展示通过主键进行删除,若不添加主键则会触发批量删除
改
db.Model(&User{}).Where("active = ?", true).Update("name", "hello")
查
//first方法会默认按照主键升序查询到第一个符合的记录
db.First(&user)
//获取一条记录,不指定顺序
db.Take(&user)
//按照主键降序查询到第一个符合条件的记录
db.Last(&user)