数据库连接
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 会自动创建外键约束,若要禁用该特性 建议禁用物理外键 }
-
使用示例,只用了一个配置