安装
go get -u github.com/jinzhu/gorm
连接数据库
连接数据库前必须导入对应的驱动。 gorm已经把常用的数据库驱动封装了,匿名导入即可。 连接MySQL就先导入mysql的驱动
import "github.com/jinzhu/gorm"
import _ "github.com/jinzhu/gorm/dialects/mysql"
func main(){
gorm.Open("",)
}
操作
增删改查的结果可以通过DB.RowsAffected来判断。
创建结构体标签
type User struct{
Id uint64 `gorm:"column:id;primary_key;auto_increament"`
Name string `gorm:"column:name;not null"`
Age int `gorm:"column:age;not null"`
}
设置表名
如果不设置表名,gorm会通过反射以结构体的名称作为表名。 有几种方式设置表名
实现gorm的接口
type User struct{....}
(u *User) TableName() string{
return "指定表名"
}
创建(增加)
gorm.Create(obj)
user:=User{}
//不需要传入指针
db := gorm.Create(user)
//根据db中的Error判断是否操作成功
if db.Error!=nil{
fmt.Println("创建失败")
}else{
fmt.Println("创建成功")
}
查询
user := &User{}
//根据主键查询第一条记录
db.First(user)
//根据指定的主键查询一条记录
db.First(user,1)
//随机获取一条记录
db.Take(user)
//根据主键查询最后一条记录
db.Last(user)
//查询所有记录
db.Find(user)
条件查询
user := &User{}
//根据一个指定条件查询第一条记录
db.Where("name = ?","小明").First(user)
排序
//单字段排序
db.Order("id desc").Find(user)
//多字段排序
db.Order("id desc").Order("name").FInd(user)
限制查询行数
//查询10条数据
db.Limit(10).Find(user)
查询起始位置
//从第3条数量开始查询
db.Offset(3).Find(user)
//重置起始位
db.Offset(-1).Find(user)
更新
更新所有字段
Save(...)方法会更新所有字段,不管有没有修改。 Save()是根据主键来更新的。
user := User{ Name:"张三",Id:33}
db.Save(&user)
更新指定的字段
指定更新前,需要先使用db.Model()或者db.Table(""),作用是指定表名。 Update()和Updates(),只会更新值被改变的字段.
//更新单个字段
db.Model(&user).Update("name","张三")
//按条件更新
db.Model(&user).Where("age =?",30).Update("name","张三")
//更新多个字段,传入Map
db.Model(&user).Updates(map[string]interface{}{"name":"张三","age":30})
//更新多个字段,传入struct
db.Model(&user).Updates(User{Name:"张三",Age:30})
注意:使用strcut更新多个字段时,如果字段有类型零值,不会更新。
删除
如果结构体中有deletedAt,db.Delete()只是软删除。 db.Unscope().Delete()才能真正的删除。 从DB.RowsAffected判断是否有删除成功。代表删除的行数。