Gorm简单了解

GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.

04_GORM查询操作_哔哩哔哩_bilibili

前置:

db调用操作语句中间加debug()可以显示对应的sql语句

1.Gorm模型定义(理解重点)

02_GORM模型定义那些事儿_哔哩哔哩_bilibili

模型定义 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.

 1)

2)结构体可以指定tag对应到数据库里的字段名称

3)一些tag

4)默认ID作主键,也可以用tag指定

 5)表名,默认结构体名字+s,可以指定

可以用func TableName()返回指定表名或者Table()

6)列名

7)三个时间戳标签

有model的就会自动嵌入,专门记录创建修改和删除的时间戳。

软删除:DeletedAt设置为当前时间表示软删除,并不是真正删除数据,相当于保护了数据完整性。查询来的时候会发现DeletedAt有值默认逻辑删除了

2.数据库连接

获取一个db代表这个数据库,后续可以利用db进行数据库操作

3.迁移表

 会自动把传入的数据类型与数据库的表格对应起来,如果有结构体变化会更改表格结构。

gorm模型和表格对应关系 

4.增添

Create()传入结构体和结构体指针都可以,但是一般指针比较小。

NewRecord()判断主键对应的对象是否已经在数据库里存在,会造成冲突

1)默认值

结构体后面反引号`gorm:"default:‘xxx’ " `

5.删除

1)单个删除或者全删

删除该类型对应表里和主键id一样的记录

tips:警告删除记录时,请确保主键字段有值,GORM 会通过主键去删除记录,如果主键为空,GORM会删除该model的所有记录。

2)符合条件的批量删除

3)软删除

 4)物理删除

6.修改

1)更新所有字段

2)改指定字段

update和updates的区别是更新一个还是多个字段

3)更新或忽略某些字段 

7.查找

1)一般

为什么传地址?因为你要查询出结果,查询结果会放在传进去的参数里,而不是放返回值里。

而且这一条只限于主键id为int类型的才能获取。               

这里传入的是一个slice指针,获取一组数据 

db.First(&user, 10)
// SELECT * FROM users WHERE id = 10;

db.First(&user, "10")
// SELECT * FROM users WHERE id = 10;

db.Find(&users, []int{1,2,3})
// SELECT * FROM users WHERE id IN (1,2,3);

// 获取第一条记录(主键升序)
db.First(&user)
// SELECT * FROM users ORDER BY id LIMIT 1;

// 获取一条记录,没有指定排序字段
db.Take(&user)
// SELECT * FROM users LIMIT 1;

// 获取最后一条记录(主键降序)
db.Last(&user)
// SELECT * FROM users ORDER BY id DESC LIMIT 1

// Get all records
result := db.Find(&users)

2)where

查询 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.

 都是在查询前面插入一个where函数写条件

// Get first matched record
db.Where("name = ?", "jinzhu").First(&user)
// SELECT * FROM users WHERE name = 'jinzhu' ORDER BY id LIMIT 1;

// Get all matched records
db.Where("name <> ?", "jinzhu").Find(&users)
// SELECT * FROM users WHERE name <> 'jinzhu';

// IN
db.Where("name IN ?", []string{"jinzhu", "jinzhu 2"}).Find(&users)
// SELECT * FROM users WHERE name IN ('jinzhu','jinzhu 2');

// LIKE
db.Where("name LIKE ?", "%jin%").Find(&users)
// SELECT * FROM users WHERE name LIKE '%jin%';

// AND
db.Where("name = ? AND age >= ?", "jinzhu", "22").Find(&users)
// SELECT * FROM users WHERE name = 'jinzhu' AND age >= 22;

// Time
db.Where("updated_at > ?", lastWeek).Find(&users)
// SELECT * FROM users WHERE updated_at > '2000-01-01 00:00:00';

// BETWEEN
db.Where("created_at BETWEEN ? AND ?", lastWeek, today).Find(&users)
// SELECT * FROM users WHERE created_at BETWEEN '2000-01-01 00:00:00' AND '2000-01-08 00:00:00';

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值