这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
一、ORM介绍
ORM:对象关系映射(Object Relational Mapping,简称ORM),也就是让你数据库的表结构变成你代码定义的数据结构(golang当中的结构体结构)从而做到,代码结构即为数据库结构,代码行为即为数据库行为
需要注意的是:
golang中结构体里面的变量(Name)必须首字母大写,否则创建不出列,会被自动忽略 gorm指定类型 json表示json接收的时候的名称 binding required表示必须传入
通俗来说就是将数据表结构自动对应上为你定义的结构体(或者Java中的类)格式
二、使用步骤
一般而言对于数据库的使用步骤如下
1. 创建连接。
import(
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
funcmain(){
// 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情
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{})
}
其中配置项包含
DSN: "gorm:gorm@tcp(127.0.0.1:3306)/gorm?charset=utf8&parseTime=True&loc=Local", (DSN data source name)
DefaultStringSize: 256 (string 类型字段的默认长度)
DisableDatetimePrecision: true, (禁用 datetime 精度,MySQL 5.6 之前的数据库不支持)
DontSupportRenameIndex: true, (重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引)
DontSupportRenameColumn: true, ( 用 change 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列)
SkipInitializeWithVersion: false, ( 根据当前 MySQL 版本自动配置)
2.利用连接执行sql语句,操作数据库。
3.获取并解析结果。
4.关闭连接。
连接池: 数据库操作都是通过连接去执行的,频繁创建与销毁连接,是需要花费较大代价的,因此一般都采用连接池对连接进行复用
GORM 使用 database/sql 维护连接池
三、CURD操作
创建
result := db.Create(&user) // 通过数据的指针来创建
user.ID // 返回插入数据的主键
result.Error // 返回 error
result.RowsAffected // 返回插入记录的条数
删除
如果没有包含主键则会批量删除
// Email 的 ID 是 `10`
db.Delete(&email)
// DELETE from emails where id = 10;
// 带额外条件的删除
db.Where("name = ?", "jinzhu").Delete(&email)
// DELETE from emails where id = 10 AND name = "jinzhu";
最基础的查询利用Find,其中和删除一样可以利用where来添加条件,可以链式调用