Golang学习笔记-6

Golang
380
0
0
2022-04-16

GORM

功能大全

  • 全功能 ORM
  • 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
  • Create,Save,Update,Delete,Find 中钩子方法
  • 支持 PreloadJoins 的预加载
  • 事务,嵌套事务,Save Point,Rollback To Saved Point
  • Context,预编译模式,DryRun 模式
  • 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
  • SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
  • 复合主键,索引,约束
  • Auto Migration
  • 自定义 Logger
  • 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
  • 每个特性都经过了测试的重重考验
  • 开发者友好

1、安装

  1. 安装 gorm
  2. $ go get -u gorm.io/gorm
  3. 按照 gorm 的 MySQL 的数据库驱动
  4. $ go get -u gorm.io/driver/mysql

2、快速开始

2.1 连接
config := mysql.New(mysql.Config{  
    DSN:  "homestead:secret@tcp(127.0.0.1:3306)/goblog?charset=utf8&parseTime=True&loc=Local",  
})
//*gorm.DB 对象
DB, err = gorm.Open(config,  &gorm.Config{})
.
// or 配置日志,可查看执行的sql
import gormlogger "gorm.io/gorm/logger"
.
.
.
DB, err = gorm.Open(config,  &gorm.Config{
    Logger: gormlogger.Default.LogMode(gormlogger.Info),  
})

gorm.Config 允许设置初始化配置信息,其 Logger 可用来指定和配置 GORM 的调试器。

LogMode 里填写的是日志级别,分别如下:

Silent —— 静默模式,不打印任何信息

Error —— 发生错误了才打印

Warn —— 发生警告级别以上的错误才打印

Info —— 打印所有信息,包括 SQL 语句

默认使用的是 Warn

2.2 配置
//*gorm.DB 对象有一个方法 DB() 可以直接获取到 database/sql 包里的 *sql.DB 对象
//db 为gorm.Open返回的 *gorm.DB 对象
sqlDB,  _  := db.DB()
// 设置最大连接数 
sqlDB.SetMaxOpenConns(100)  
// 设置最大空闲连接数 s
qlDB.SetMaxIdleConns(25)  
// 设置每个链接的过期时间 
sqlDB.SetConnMaxLifetime(5  * time.Minute)
2.3 使用
  1. 查询
  • First():获取一条记
// First 获取一条记录
err := db.First(&article ,  1).Error
// select * from articles where id = 1
  • Find():获取所有记录
//Find 获取全部记录
var articles []Article 
err := db.Find(&articles).Error
// select * from articles
GORM 提供的是链式 API,如果遇到任何错误,GORM 会设置 *gorm.DB 的 Error 字段
找不到记录时,GORM 会返回 ErrRecordNotFound 错误
  1. 创建 Create ()
article := Article{ Title: title, Body: body,  }
result := db.Create(&article)
// insert into articles(title, body) vaules (title, body)
//insertID := article.ID
//err := result.Error
  1. GORM 的 Create() 有几个返回值可供判断:
article.ID             // 返回插入数据的主键
result.Error           // Create结果返回 error
result.RowsAffected    // 返回插入记录的条数
  1. 修改 Save ()
article := Article{ID:id, Title: title, Body: body,  }
result := db.Save(&article)
// update articles set title = title, body = body where id = id
  1. 返回结果有两个元素可以判断:
result.RowsAffected // 更新的记录数
result.Error        // 更新的错误
  1. 删除 Delete()
article := Article{ID:id, Title: title, Body: body,  }
result := db.Delete(&article)
// delete from articles where id = id
  1. 同样,返回结果有两个元素可以判断:
result.RowsAffected // 更新的记录数
result.Error        // 更新的错误

关于 gorm ,后面继续学习,先欠着

  • 贵在坚持,保持进步