1、GORM是一种对象关系映射ORM框架,数据表对应结构体,数据行对应结构体实例,数据库字段对应结构体字段。
在gorm中,表名默认就是结构体名称的复数,也可以通过方法或者db.Table("表名")自定义表名;
列名由两个单词组成,在数据库中默认转小写后用下划线链接;
如果结构体有ID字段则默认ID字段为主键。
2、另外,GORM内置了一个gorm.Model结构体。gorm.Model是一个包含了ID, CreatedAt, UpdatedAt, DeletedAt四个字段的Golang结构体,可以将其嵌入到自己的结构体中。(如果模型内置了gorm.model有DeletedAt字段,则调用Delete删除该记录时,将会设置DeletedAt字段为当前时间,而不是直接将记录从数据库中删除,即软删除)
3、gorm中支持的结构体tag:
Type 指定列数据类型
Size 指定列大小, 默认值255
PRIMARY_KEY 将列指定为主键
UNIQUE 将列指定为唯一
NOT NULL 将列指定为非 NULL
Column 指定列名
default 设置默认值
4、例子:
查询
db.Select("name, age").Order("age desc").Limit(3).Find(&user, "name = ?", "jinzhu")
db.Select("name, age").Order("age desc").Limit(3).Where("name = ?","jinzhu").Find(&users)
修改
// 根据给定的条件更新单个属性
db.Model(&user).Where("active = ?", true).Update("name", "hello")
// 使用 map 更新多个属性,只会更新其中有变化的属性
db.Model(&user).Updates(map[string]interface{}{"name": "hello", "age": 18, "active": false})
// 使用 struct 更新多个属性,只会更新其中有变化且为非零值的字段
db.Model(&user).Updates(User{Name: "hello", Age: 18})
如果你想更新或忽略某些字段,你可以使用 Select,Omit
删除
db.Where("email LIKE ?", "%jinzhu%").Delete(Email{})
db.Delete(Email{}, "email LIKE ?", "%jinzhu%")
在 GORM 中使用多个立即执行方法时,后一个立即执行方法会复用前一个立即执行方法的条件 (不包括内联条件,find中写的条件) 。立即执行方法是指那些会立即生成SQL语句并发送到数据库的方法,一般是CRUD方法,如:Create, First, Find, Take, Save, UpdateXXX, Delete, Scan, Row, Rows…
5、db.debug 可以返回查询的sql语句