[后端与gorm的学习使用|青训营笔记]

36 阅读2分钟

这是我参与[第五届青训营]笔记创作活动的第7天 本文主要想对项目作业完成途中学习的gorm部分进行总结。

一、本文主要内容

  1. gorm是什么
  2. gorm的一些使用

二、详细知识点介绍

gorm是什么

gorm是一个好用的连接数据库以及交互数据库的框架,支持MySQL, PostgreSQL, SQlite, SQL Server。而且有官方中文文档,对英语不好的人来说是一个很大优势点( gorm.io/zh_CN/docs/…

gorm的一些使用

gorm安装

go get -u gorm.io/gorm

go get -u gorm.io/driver/sqlite

连接mysql

dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"

func main() {
    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{})
}

自动迁移

gorm可以根据结构体自动迁移建表,但建的表表名可能被调整为复数。可以通过禁用复数或自定义表名来解决

1、
db.SingularTable(true)
2type table struct{	
    Id int `gorm:"id"`
}	
func (c *table)TableName(){return "呱唧呱唧"}

创建

user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}

result := db.Create(&user) // 通过数据的指针来创建

user.ID             // 返回插入数据的主键
result.Error        // 返回 error
result.RowsAffected // 返回插入记录的条数


查询

GORM 提供了 First、Take、Last 方法,以便从数据库中检索单个对象。但需要注意未找到记录时会返回ErrRecordNotFound 错误


// 获取第一条记录(主键升序) 
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;

还可以使用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;