Gorm简单了解

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

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

前置:

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

Gorm简单了解_第1张图片

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

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

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

 1)Gorm简单了解_第2张图片

Gorm简单了解_第3张图片

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

Gorm简单了解_第4张图片

3)一些tag

Gorm简单了解_第5张图片

Gorm简单了解_第6张图片

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

Gorm简单了解_第7张图片

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

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

Gorm简单了解_第8张图片

Gorm简单了解_第9张图片

6)列名

Gorm简单了解_第10张图片

7)三个时间戳标签

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

Gorm简单了解_第11张图片

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

2.数据库连接

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

Gorm简单了解_第12张图片

3.迁移表

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

gorm模型和表格对应关系 

Gorm简单了解_第13张图片

4.增添

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

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

Gorm简单了解_第14张图片

1)默认值

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

Gorm简单了解_第15张图片

5.删除

1)单个删除或者全删

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

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

Gorm简单了解_第16张图片

2)符合条件的批量删除

Gorm简单了解_第17张图片

3)软删除

Gorm简单了解_第18张图片

 4)物理删除

6.修改

1)更新所有字段

Gorm简单了解_第19张图片

2)改指定字段

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

Gorm简单了解_第20张图片

Gorm简单了解_第21张图片

3)更新或忽略某些字段 

Gorm简单了解_第22张图片

7.查找

1)一般

Gorm简单了解_第23张图片

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

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

Gorm简单了解_第24张图片

这里传入的是一个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)

Gorm简单了解_第25张图片

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';

 

你可能感兴趣的:(gorm,golang)