package main
import (
"fmt"
"gorm.io/gorm"
"log"
)
import "gorm.io/driver/mysql"
type User struct {
gorm.Model
Name string
Posts []Post `gorm:"foreignkey:UserID"` //一对多
}
type Post struct {
gorm.Model
Title string
Content string
UserID uint
}
func createUserAndPosts(db *gorm.DB) {
user := User{
Name: "John Doe",
Posts: []Post{
{Title: "Post 1", Content: "This is the first post."},
{Title: "Post 2", Content: "This is the second post."},
},
}
result := db.Create(&user)
if result.Error != nil {
log.Fatal("Failed to create user and posts:", result.Error)
}
fmt.Println("User and posts created successfully!")
}
func queryUserAndPosts(db *gorm.DB) {
var user User
result := db.Preload("Posts").Take(&user, 1)
if result.Error != nil {
log.Fatal("Failed to query user and posts:", result.Error)
}
fmt.Println("User:", user)
for _, post := range user.Posts {
fmt.Println(post)
}
}
func updatePost(db *gorm.DB) {
var post Post
db.First(&post, "user_id = ?", 1)
post.Title = "Go From start to Ends"
post.Content = "Go From end to start to Endsssss"
//db.Model(&post).Update("Title", post.Title)
//db.Model(&post).Update("Content", post.Content)
db.Debug().Select("Title", "Content").Save(&post)
}
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{}, &Post{})
if err != nil {
log.Fatalln("Failed to migrate tables: ", err)
}
fmt.Println("Database migrated")
updatePost(db)
}



