栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 游戏开发 > Cocos2d-x

Gorm之gorm.Config结构体字段详解

Cocos2d-x 更新时间:发布时间: 百科书网 趣学号

文章目录
  • Gorm之gorm.Config结构体字段详解
    • 1.SkipDefaultTransaction(事务)字段
      • 1.1系统默认事务
      • 1.2跳过默认事务
    • 2.NamingStrategy(表名)字段
      • 2.1系统默认表名
      • 2.2取消默认表名
      • 2.3表名加前缀
      • 2.4自定义表名
    • 3.DisableForeignKeyConstraintWhenMigrating(外键约束)字段
      • 3.1默认外键约束
      • 3.2取消外键约束
    • 4.NowFunc(创建时间)字段
    • 5.DryRun(测试SQL)字段
    • 6.PrepareStmt(预编译)字段
    • 7.DisableAutomaticPing(ping数据库)字段
    • 8.常用模板

Gorm之gorm.Config结构体字段详解

注:本文是基于Windos系统上 gorm.io/gorm@v1.23.4、gorm.io/driver/mysql@v1.3.3进行讲解

1.SkipDefaultTransaction(事务)字段 1.1系统默认事务

系统的默认事务:我们的gorm连接到数据库后,我们所做的增删改查操作,只要是这种链式的,gorm会自动的帮我们以事务的方式给串联起来,保证数据的一致性

1.2跳过默认事务
package main

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

func main() {
	conn, err := gorm.Open(mysql.New(mysql.Config{
		DSN:               "root:414524@tcp(127.0.0.1:3306)/gotest?charset=utf8mb4&parseTime=True&loc=Local", 
		DefaultStringSize: 171,                                                             
	}), &gorm.Config{
		SkipDefaultTransaction: true,  //配置成为true即可取消系统默认事务
	})
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(conn, err)
}
2.NamingStrategy(表名)字段 2.1系统默认表名

系统默认为表明加s;
表名是结构体名称的复数形式 ,会自动在后面加一个s,且会把表明的英文大写改成小写

type User struct {} // 默认的表名是 users ,会自动把大写改成小写

2.2取消默认表名
package main

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/schema"
)
//模型结构
type love struct {
	Id   int
	Name string
	Age  int
}

func main() {
	conn, err := gorm.Open(mysql.New(mysql.Config{
		DSN:               "root:414524@tcp(127.0.0.1:3306)/gotest?charset=utf8mb4&parseTime=True&loc=Local",
		DefaultStringSize: 171,
	}), &gorm.Config{
		NamingStrategy: schema.NamingStrategy{
			SingularTable: true, // love表将是love,不再是loves,即可成功取消表明被加s
		},
	})
	if err != nil {
		fmt.Println(err)
	}
	conn.AutoMigrate(&love{})
}
//NamingStrategy的字段类型是:schema.Namer,Namer是gorm的子包schema里的一个接口
//schema.NamingStrategy是gorm/schema包里的一个结构体

代码运行前数据库样子:

代码运行后数据库样子:


2.3表名加前缀
package main

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

//模型结构
type love struct {
	Id   int
	Name string
	Age  int
}

func main() {
	conn, err := gorm.Open(mysql.New(mysql.Config{
		DSN:               "root:414524@tcp(127.0.0.1:3306)/gotest?charset=utf8mb4&parseTime=True&loc=Local",
		DefaultStringSize: 171,
	}), &gorm.Config{
		NamingStrategy: schema.NamingStrategy{
			TablePrefix:   "t_", // 表名前缀,`love`表为`t_love`
			SingularTable: true, // 使用单数表名,启用该选项后,`love` 表将是`love`
		},
	})
	if err != nil {
		fmt.Println(err)
	}
	conn.AutoMigrate(&love{})
}

代码运行前数据库样子:

代码运行后数据库样子:

注:假如数据库里的t_use表存在,假如现在把代码里的前缀改成了"m_" ,进行再次运行后,数据库里会同时存在t_user表与m_user表,以后操作的都是m_user , 可以把t_user删了

2.4自定义表名
package main

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

type People struct {
	Name string
	Age  int64
}


func (People) TableName() string {
	return "llh" //在这里写想要设置的表名
}
func main() {
	dsn := "root:414524@tcp(127.0.0.1:3306)/gotest?charset=utf8mb4&parseTime=True&loc=Local"
	conn, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		fmt.Println(err)
	}
	conn.AutoMigrate(&People{})

}

代码运行前

代码运行后:

3.DisableForeignKeyConstraintWhenMigrating(外键约束)字段 3.1默认外键约束

在使用AutoMigrate或Migrator接口的CreateTable方法创建表时,GORM 会自动创建外键约束,即会自动创建一个物理外键,使查询很缓慢;
若要禁用该特性,可将其设置为 true,即逻辑外键,即需要自己手动去设置外键,建议改为true,会让数据库的处理速度快很多
注:AutoMigrate是自动迁移的意思

3.2取消外键约束
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  DisableForeignKeyConstraintWhenMigrating: true,
})
4.NowFunc(创建时间)字段

5.DryRun(测试SQL)字段

6.PrepareStmt(预编译)字段

7.DisableAutomaticPing(ping数据库)字段

8.常用模板
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  SkipDefaultTransaction: false,  //不过在开发中我们常常配为false,即仍然遵循系统默认事务
    DisableForeignKeyConstraintWhenMigrating: true,  //在开发中我们常常配为true ,即取消外键约束
     NamingStrategy: schema.NamingStrategy{
    SingularTable: true, // 使用单数表名
  },
})
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/1067213.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号