栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

Gorm之gorm.Migrator接口详解

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Gorm之gorm.Migrator接口详解

文章目录
  • Gorm之gorm.Migrator接口详解
    • 1.CreateTable方法
    • 2.HasTable方法
    • 3.HasTable方法
    • 4.DropTable方法
    • 5.DropTable方法
    • 6.RenameTable方法
    • 7.RenameTable方法
    • 8.列系列方法

Gorm之gorm.Migrator接口详解

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

1.CreateTable方法
package main

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

//模型结构
type hate 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_",
			SingularTable: true,
		},
	})
	if err != nil {
		fmt.Println(err)
	}
	M := conn.Migrator()   //返回的是一个Migrator接口,Migrator接口里面有很多方法
	M.CreateTable(&hate{}) //
	//这两行等效于conn.AutoMigrate(&hate{})
}

这是运行代码之前的样子:

这是运行代码之后的样子:

2.HasTable方法

传入结构体名字
通过结构体的名字的方式去查找数据库里是否存在指定的表;

package main

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

//模型结构
type hate 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_",
			SingularTable: true,   //注意:这两行内容是绝对不可以删除的,否则查找不成功
		},
	})
	if err != nil {
		fmt.Println(err)
	}
	M := conn.Migrator() //返回的是一个Migrator接口,Migrator接口里面有很多方法
	fmt.Println(M.HasTable(&hate{})) //所以写的是结构体的名字,但是会自动去找t_hate表; 这个方法返回一个布尔值
}

这是运行代码之前的样子:

3.HasTable方法

传入表名真实名字
通过表格的真实名字去查找数据库里是否存在指定的表

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{})
	if err != nil {
		fmt.Println(err)
	}
	M := conn.Migrator() //返回的是一个Migrator接口,Migrator接口里面有很多方法
	fmt.Println(M.HasTable("t_hate"))  //这里面的参数是表的真实名字
}

这是运行代码之前的样子:

4.DropTable方法

传入结构体名字
用于删除表;
返回值为error ,若返回 则表明删除成功

package main

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

type hate 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_",
		SingularTable: true,      //注意:这两行内容是绝对不可以删除的,否则删除不成功
	},
	})
	if err != nil {
		fmt.Println(err)
	}
	M := conn.Migrator() //返回的是一个Migrator接口,Migrator接口里面有很多方法
	fmt.Println(M.DropTable(&hate{}))  
}

这是运行代码之前的样子:

这是运行代码之后的样子:

5.DropTable方法

传入表名真实名字

fmt.Println(M.DropTable("t_hate"))//也可以传入“表的真实名字为参数
6.RenameTable方法

传入表名真实名字
用于重命名表;
返回值是error类型的

先创建一个表叫做:asd

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{})
	if err != nil {
		fmt.Println(err)
	}
	M := conn.Migrator() //返回的是一个Migrator接口,Migrator接口里面有很多方法
	M.RenameTable("asd", "fgh")
}

7.RenameTable方法

传入结构体名字
注:旧名字与新名字也可以传入结构体
比如:

M.RenameTable(&asd{}, "fgh")或者M.RenameTable(&asd{}, &fgh{})
8.列系列方法
type User struct {
  Name string
}

// 添加 name 字段
db.Migrator().AddColumn(&User{}, "Name")
// 删除 name 字段
db.Migrator().DropColumn(&User{}, "Name")
// 修改 name 字段
db.Migrator().AlterColumn(&User{}, "Name")
// 检查字段是否存在
db.Migrator().HasColumn(&User{}, "Name")

type User struct {
  Name    string
  NewName string
}

// 重命名字段
db.Migrator().RenameColumn(&User{}, "Name", "NewName")
db.Migrator().RenameColumn(&User{}, "name", "new_name")

// 获取字段类型
db.Migrator().ColumnTypes(&User{}) ([]*sql.ColumnType, error)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/944320.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号