Golang gorm demo1
时间:2025-1-17 13:51 作者:杨佳乐 分类: Golang
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/schema"
"time"
)
// 定义用户模型
type User struct {
ID uint `gorm:"primaryKey;not null"`
Name string `gorm:"size:100"`
Mobile string `gorm:"uniqueIndex;size:20"`
CreatedAt time.Time
UpdatedAt time.Time
}
func main(){
dsn := "root:123456@tcp(127.0.0.1:3306)/gormdemo1?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
NamingStrategy: schema.NamingStrategy{
TablePrefix: "tes_", // 设置表前缀
SingularTable: false, // 禁用表名复数
},
})
if err != nil {
fmt.Println("数据库连接失败: %v", err)
}
fmt.Println("数据库连接成功!")
err = db.AutoMigrate(&User{})
if err != nil {
fmt.Println("创建User表失败: %v", err)
}
fmt.Println("创建User表成功")
// 添加一条数据
// user1 := User{
// Name:"user1",
// Mobile:"1000000000",
// }
// result := db.Create(&user1)
// if result.Error != nil {
// fmt.Println("failed to create user: %v", result.Error)
// }
// fmt.Println(user1)
// 查询数据
var user User
// 主键查询
db.Find(&user,1)
var user2 User
// 条件查询
db.Find(&user2,"mobile = ?","1000000000")
fmt.Println(user)
fmt.Println(user2)
// 模拟动态条件
var wheres = make(map[string]interface{})
wheres["name"] = "test"
wheres["mobile"] = "111"
// wheres := map[string]interface{}{"name":"test","mobile":"1111",}
var user3 User
query := db.Model(&User{})
for key,value := range wheres{
if value != "" {
query = query.Where(fmt.Sprintf("%s = ?", key), value)
}
}
query.Find(&user3)
var upduser User
db.Find(&upduser,1)
// 更新某个字段
db.Model(&upduser).Update("mobile","123123")
// 更新多个字段
db.Model(&upduser).Updates(&User{Name:"aaaa",Mobile:"1000000000"})
// 删除
db.Delete(&upduser)
// 查询多条数据
var userlist []User
db.Where("id > ?",0).Find(&userlist)
fmt.Println(userlist)
for k,v := range userlist {
fmt.Println(k)
fmt.Println(v.Name)
}
var orderlist []User
// 分页及排序
db.Order("id desc").Limit(10).Offset(0).Find(&orderlist)
fmt.Println(orderlist)
// 事务操作
err = db.Transaction(func(tx *gorm.DB) error {
if err := tx.Create(&User{Name: "User1",Mobile:"1700000111"}).Error; err != nil {
return err
}
if err := tx.Create(&User{Name: "User2",Mobile:"160000"}).Error; err != nil {
return err
}
return nil
})
if err != nil {
fmt.Println("出现事务错误")
fmt.Println(err)
}
pageFind(db)
// 关闭连接
mysqldb,err := db.DB()
mysqldb.Close()
}
// 分页查询,处理总数量、总页数
func pageFind(db *gorm.DB){
fmt.Println("进入分页方法查询")
var totalCount int64
query := db.Model(&User{}).Where("id > 0")
// 查询总数量
query.Count(&totalCount)
// 查询当前页数据
var list []User
pageSize := 2
currentPage := 0
db.Limit(pageSize).Offset(currentPage).Find(&list)
// 计算总页数
totalPages := (totalCount + int64(pageSize) - 1) / int64(pageSize)
fmt.Println("分页查询完毕")
fmt.Println(list)
fmt.Println("总数量",totalCount,"总页数",totalPages)
}