searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Golang gorm框架使用简介

2023-11-01 09:37:44
6
0

一、字段映射-模型定义

type UserModel struct {
   BaseModel
   UserId int64  `gorm:"index"`                   //设置一个普通索引,没设置索引名,gorm会自动命名
   Age    int    `gorm:"column:age"`              //映射到列名称
   Name   string `gorm:"size:255;index:idx_name"` //size:设置长度大小,index:设置索引,取了索引名
   Status string `gorm:"type:enum('published','pending','deleted');default:'pending'"`
}
func (u *UserModel) TableName() string {
   return "User"
}
type BaseModel struct {
   ID       uint `gorm:"primary_key"`
   CreateAt time.Time
   UpdateAt time.Time
}

二、增删改查

1、创建数据库连接

func GetDB() (*gorm.DB, error) {
   dialect := mysql.New(mysql.Config{
      DriverName: "mysql",
      DSN:        "用户名:密码@tcp(127.0.0.1:3306)/gormdemo?charset=utf8&loc=Local",
   })
   gormCfg := &gorm.Config{
      NamingStrategy: schema.NamingStrategy{
         SingularTable: true,
      },
      CreateBatchSize: 10,
   }
   gDB, err := gorm.Open(dialect, gormCfg)
   if err != nil {
      return nil, err
   }
   sqlDb, err := gDB.DB()
   if err != nil {
      return nil, err
   }
   sqlDb.SetConnMaxLifetime(60 * 1000)
   sqlDb.SetMaxIdleConns(30)
   sqlDb.SetMaxOpenConns(100)
   return gDB, nil
}

2、新增数据

db, err := GetDB()
if err != nil {
   print(err.Error())
   return
}
user := &UserModel{
   UserId: 1,
   Age:    11,
   Name:   "xxx",
   Status: "published",
}
db.Create(user)

3、修改数据

db, err := GetDB()
if err != nil {
   print(err.Error())
   return
}
db.Model(&UserModel{BaseModel: BaseModel{ID: 1}}).Update("name", "xxxx")
db.Model(&UserModel{}).Where("id = ? and age = ?", 3, 11).Updates(UserModel{UserId: 123, Name: "eee", Age: 2})

4、删除数据

db, err := GetDB()
if err != nil {
   print(err.Error())
   return
}
// 加debug 打印sql语句
db.Debug().Where("id = ?", 4).Delete(&UserModel{})
db.Delete(&UserModel{}, "id = ?", 5)

5、查询数据

db, err := GetDB()
if err != nil {
   print(err.Error())
   return
}
// 查询第一条记录
var user UserModel
db.First(&user)
fmt.Println(user)

// 查询最后一条记录
var user2 UserModel
db.Last(&user2)
fmt.Println(user2)

// 指定某条记录,主键为整型可用
var user3 UserModel
db.First(&user3, 1)
fmt.Println(user3)

//where条件-符合条件的第一条
var user4 UserModel
db.Where("name = ?", "lalala").First(&user4)
fmt.Println(user4)

//where条件-符合条件的所有记录
var user5 []UserModel
db.Where("name = ?", "xxxx").Find(&user5)
for _, v := range user5 {
   fmt.Println(v)
}
// 总数
var count int64
var user6 []UserModel
db.Find(&user6).Count(&count)
fmt.Println(count)

// select 查询
var user7 UserModel
db.Where("id = ?", 1).Select("id,name,age").Find(&user7)
fmt.Println(user7)

// 原生查询
var user8 []UserModel
db.Raw("select * from User where id = ? and name = ?", 1, "xxxxx").Scan(&user8)
fmt.Println(user8)

 

0条评论
0 / 1000
x****n
6文章数
0粉丝数
x****n
6 文章 | 0 粉丝