使用GORM连接数据库,实现增删改查 | 青训营

102 阅读4分钟

使用GORM连接数据库

目录

数据库连接

自动迁移表
增删改查操作

数据库连接

gorm是一个Golang写的,开发人员友好的ORM库。

gorm支持多种数据库连接,目前官方列出来的支持库有:MySQL, PostgreSQL, SQLite, SQL Server 四种数据库连接。在我们要开发的项目中,我们选择使用 MySQL 来作为后端数据库。

连接MySQL数据库,需要引入 gorm 和mysql两个包:

import (
  "gorm.io/driver/mysql"
  "gorm.io/gorm"
)

同时连接mysql需要使用tcp套接字符串来连接,因此需要先构建套接字符串:

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{})

为了让mysql可以更好的工作,往往,我们还需要再设置一下给连接对象设置空闲时的最大连接数、设置与数据库的最大打开连接数,每一个连接的生命周期等信息。

sqlDB, err := db.DB()
    if err != nil {
        return err
    }
    sqlDB.SetMaxIdleConns(1000)
    sqlDB.SetMaxOpenConns(100000)
    sqlDB.SetConnMaxLifetime(-1)

-->db.DB() 是获得db连接对象

-->SetMaxIdleConns 是设置空闲时的最大连接数

-->SetMaxOpenConns 设置与数据库的最大打开连接数

-->SetConnMaxLifetime 每一个连接的生命周期等信息

这几个配置在数据库大量读写的时候,非常有用,可以保证在大量并发读写的时候,数据库依然可以正常工作。

自动迁移表

gorm还有一个强大的功能,就是自动迁移表功能。启用自动迁移模式可以保持mysql表更新到最新。

上面已经创建好了5个表的模型,并且提到了可以使用 AutoMigrate 函数来实现自动迁移,现在将它们添加为自动迁移模式。重新打开config/config.go,在InitDB()函数中添加上下面的代码:

db.AutoMigrate(&model.Admin{}, &model.Article{}, &model.ArticleData{}, &model.Attachment{}, &model.Category{})

到这里只要每次运行这个项目,它都会先执行自动迁移,来保证数据库表的字段更新到最新。

增删改查操作

func (post *Comment) GetCounts() (count int64){
    Db.Model(post).Count(&count)
    return
}

//创建表
func (post *Comment) CreateComments() error{
    return Db.Create(post).Error
}

//获取全部内容
func (post *Comment) GetComments() (comments []Comment){
    Db.Find(&comments)
    return comments
}

//获取id为1 的字段
func (post *Comment) GetUser() (comments []Comment, err error) {
    Db.Model(post).Where("id = ?", 1).Find(&comments)
    err = Db.Model(&post).Related(&comments).Error
    return
}

//更新字段
func (post *Comment) UpdateComments() (comments []Comment, err error){
    //Db.Model(post).Update("id",1).Update("author",33333)
    Db.Model(post).Where("id = ?", 1).Updates(map[string]interface{}{"author": 9999,"content":444444,"create_time":time.Now()})
    err = Db.Model(post).Related(&comments).Error
    return
}

//分页数据
func (post *Comment) GetPages(pageSize int,page int) (comments []Comment){
    Db.Where("id >= ?",3).Limit(pageSize).Offset((page-1)*pageSize).Find(&comments)
    return comments
}

//删除数据
func (post *Comment) DeleteComments() (err error) {
    return Db.Where("id = ?", 2).Delete(&post).Error

}

总结

使用 Gorm 实现增删改查操作的总结可以概括为以下几点:

1.连接数据库:首先,使用 Gorm 创建数据库连接。需要指定数据库的类型(如 MySQL、PostgreSQL),连接字符串或其他必要的连接参数。

2.定义模型结构:在 Gorm 中,需要定义与数据库表相对应的模型结构。这些模型结构定义了表的字段和关联关系。可以为每个模型创建一个 Go 结构体,并使用 Gorm 的标签注释来指定字段的属性和约束。

3.创建表和迁移:使用 Gorm 的自动迁移功能,可以轻松地创建数据库表。在应用启动时,调用 Gorm 提供的自动迁移方法,它会根据模型的定义自动创建或修改数据库的表结构。

4.创建记录:使用 Gorm 可以方便地创建数据库记录。通过创建一个模型实例并赋值所需字段,然后使用 db.Create() 方法将记录插入到数据库中。

5.查询记录:Gorm 提供丰富的查询方法,帮助我们从数据库中获取所需的记录。可以使用 db.First()、db.Find()、db.Where() 等方法来执行查询,也可以使用链式调用来构建更复杂的查询条件。

6.更新记录:使用 Gorm,我们可以轻松地更新数据库记录。通过查询获得需要更新的记录,然后修改模型实例的字段值,并使用 db.Save() 方法将更改保存到数据库中。

7.删除记录:Gorm 使删除记录变得简单。通过查询获得需要删除的记录,然后使用 db.Delete() 方法将其从数据库中删除。

8.高级查询:Gorm 提供了强大的查询功能,可以应对更复杂的查询需求。我们可以使用预加载、关联查询、原始 SQL 查询等技术来执行高级查询操作。