gorm v2.0简单使用总结

本文详细介绍了 GORM v2.0 的使用,包括数据库连接配置、基本的CRUD操作、一对一、一对多、多对多关系的建立与管理、预加载、钩子函数、原生SQL、迁移以及事务处理。通过示例展示了如何禁用外键约束、自定义外键和引用,以及如何使用预加载进行关联数据查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库连接
import (
   "gorm.io/driver/mysql"
   "gorm.io/gorm"
   "testing"
)
​
// 测试连接mysql
func TestConnectMysql(t *testing.T) {
   dsn := "root:1234@(127.0.0.1:3306)/SimpleGorm?charset=utf8mb4&parseTime=True&loc=Local"
   db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
}

gorm.Open第一个参数是Dialector类型

  • 简单的,直接按照数据库的地址构造dialector 即mysql.Opne(dsn)

  • 复杂的,支持MySQL的配置

    mysql.New(mysql.Config{
      DSN: "gorm:gorm@tcp(127.0.0.1:3306)/gorm?charset=utf8&parseTime=True&loc=Local", // DSN data source name
      DefaultStringSize: 256, // string 类型字段的默认长度
      DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持
      DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
      DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列
      SkipInitializeWithVersion: false, // 根据当前 MySQL 版本自动配置
    })

gorm.Open的第二个参数是Option类型,可以设置gorm的配置

  • 支持的配置有如下

    type Config struct {
      SkipDefaultTransaction   bool             //跳过默认事务
      NamingStrategy           schema.Namer     // 表和列命名策略
      Logger                   logger.Interface // 配置日志
      NowFunc                  func() time.Time // 更改创建时间使用的函数
      DryRun                   bool         //生成 SQL 但不执行,可以用于准备或测试生成的 SQL
      PrepareStmt              bool     //在执行任何 SQL 时都会创建一个 prepared statement 并将其缓存,以提高后续的效率
      DisableNestedTransaction bool     // 禁用嵌套事务
      AllowGlobalUpdate        bool     // 启用全局 update/delete
      DisableAutomaticPing     bool     //GORM 会自动 ping 数据库以检查数据库的可用性.可以禁用
      DisableForeignKeyConstraintWhenMigrating bool //GORM 会自动创建外键约束,若要禁用该特性 建议禁用物理外键
    }
  • 使用示例,只用了一个配置

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值