一、字段映射-模型定义
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)