创建gorm连接
// 修改默认属性 表名不加s
gormConfig := &gorm.Config{
NamingStrategy: schema.NamingStrategy{
SingularTable: true,
},
}
// 创建gorm连接
gormDB, err := gorm.Open(mysql.Open("root:aaaa@tcp(localhost:3306)/test?charset=utf8&parseTime=True&loc=Local"), gromConfig)
if err != nil {
log.Print("数据库连接失败", err)
}
坑: gormConfig的作用后面讲
创建结构体
type User struct {
User_id string `gorm:"type:varchar(50);primaryKey"`
Name string `gorm:"type:varchar(20)"`
Phone string `gorm:"type:varchar(20)"`
Address string `gorm:"type:varchar(100)"`
Sex string `gorm:"type:varchar(10)"`
Age int `gorm:"type:int(11)"`
}
生成随机id
// 生成随机id
func AddRandoms() string {
id := uuid.NewV4()
ids := id.String()
return ids
}
新增
err := gorm.Table("user").AutoMigrate(&User{})
if err != nil {
log.Print("数据库与结构体映射失败", err)
}
userData := &User{
User_id: AddRandoms(),
Name: "廷益",
Phone: "16666666666",
Address: "北京北京",
Sex: "男",
Age: 19,
}
result := gorm.Create(userData)
if result.Error != nil {
log.Print("新建数据失败", result.Error)
}
首先gorm.Table("user") 这里的user为提前创建好的表名 前面提到的gormConfig的作用: gorm在读取表名的时候会默认给表名后面加上一个s 需要手动设置取消这个s 就比如现在的user 如果不手动设置取消加s的话 执行这段代码他就会根据结构体 创建一个users表
结果:
修改
var user User
user.User_id = "59b50a0b-9093-4ff5-afa8-248b21422704"
result := gorm.Model(user).Update("name", "余华是个大帅哥").Where("user_id=?", user)
if result.Error != nil {
log.Print("数据修改失败", result.Error)
}
这里要注意的就是gorm.Moel(user)中的user为结构体user的一个实例对象 可以是没有值的 在这的作用仅仅只是通过这个对象找到结构体 再通过结构体映射找到表名还有表机构 但是在Where中 仍然需要以该结构体创建对象并且需要将满足条件的值赋值给该对象 用sql语句表现为
UPDATE user SET name="余华是个大帅哥" WHERE user_id="a3346911-1c19-4780-8e8a-b837d2d7dc92"
结果:
查询单个对象
var data *User
result := gorm.Find(&data).Where("user_id=?", "a3346911-1c19-4780-8e8a-b837d2d7dc92")
if result.Error != nil {
log.Print("获取失败", result.Error)
}
// 结果输出
log.Print(data)
查询多个对象
var userList []*User
result := gorm.Limit(10).Offset(0).Find(&userList)
if result.Error != nil {
log.Print("获取数据错误", result.Error)
}
删除
var user User
user.User_id = "a3346911-1c19-4780-8e8a-b837d2d7dc92"
result := gorm.Delete(user)
if result.Error != nil {
log.Print("删除失败", result.Error)
}