package main
import (
"fmt"
"gorm.io/gorm"
"log"
)
import "gorm.io/driver/mysql"
type User struct {
gorm.Model
Name string
Roles []Role `gorm:"many2many:user_roles;"` // 多对多关系
}
type Role struct {
gorm.Model
Name string
Users []User `gorm:"many2many:user_roles;"` // 多对多关系
}
func createUserAndRoles(db *gorm.DB) {
// 创建角色
adminRole := Role{Name: "Admin"}
userRole := Role{Name: "User"}
db.Create(&adminRole)
db.Create(&userRole)
// 创建用户并关联角色
user := User{
Name: "meowrain",
Roles: []Role{adminRole, userRole}, // 关联多个角色
}
db.Create(&user)
fmt.Println("User and roles created successfully!")
}
func queryUserAndRoles(db *gorm.DB) {
var user User
db.Preload("Roles").First(&user, 1) // 查询 ID 为 1 的用户及其角色
fmt.Println("User:", user.Name)
for _, role := range user.Roles {
fmt.Println("Role:", role.Name)
}
}
func updateUserRoles(db *gorm.DB) {
var user User
db.Preload("Roles").First(&user, 1) // 查询 ID 为 1 的用户及其角色
// 创建新角色
newRole := Role{Name: "Editor"}
db.Create(&newRole)
// 更新用户的角色
user.Roles = []Role{newRole} // 替换用户的角色
db.Save(&user)
fmt.Println("User roles updated successfully!")
}
func deleteUserAndRoles(db *gorm.DB) {
var user User
db.Preload("Roles").First(&user, 1) // 查询 ID 为 1 的用户及其角色
// 删除用户及其关联的角色
db.Select("Roles").Delete(&user)
fmt.Println("User and roles deleted successfully!")
}
func main() {
dsn := mysql.Open("root:123456@tcp(127.0.0.1:3306)/mybatis_learn?charset=utf8&parseTime=True&loc=Local")
db, err := gorm.Open(dsn, &gorm.Config{})
if err != nil {
log.Println(err)
return
}
err = db.AutoMigrate(&User{}, &Role{})
if err != nil {
log.Fatalln("Failed to migrate tables: ", err)
}
fmt.Println("Database migrated")
createUserAndRoles(db)
}