type Area struct{
Id int
AreaId int
AreaName string
CityId int
CityName string
ProvinceId int
ProvinceName string
AreaStatus int
CreatedAt time.Time
UpdatedAt time.Time
}
package main
import("github.com/jinzhu/gorm"_"github.com/jinzhu/gorm/dialects/mysql")var db *gorm.DB
type User struct{
Id int
Name string
Age int
Sex byte
Phone string}funcinit(){var err error
db, err = gorm.Open("mysql","root:123456@tcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local")if err !=nil{panic(err)}//设置全局表名禁用复数
db.SingularTable(true)}
//注意,Model方法必须要和Update方法一起使用//使用效果相当于Model中设置更新的主键key(如果没有where指定,那么默认更新的key为id),Update中设置更新的值//如果Model中没有指定id值,且也没有指定where条件,那么将更新全表//相当于:update user set name='xiaoming' where id=1;
user := User{Id:1,Name:"xiaoming"}
db.Model(&user).Update(user)//注意到上面Update中使用了一个Struct,你也可以使用map对象。//需要注意的是:使用Struct的时候,只会更新Struct中这些非空的字段。//对于string类型字段的"",int类型字段0,bool类型字段的false都被认为是空白值,不会去更新表//下面这个更新操作只使用了where条件没有在Model中指定id//update user set name='xiaohong' wehre sex=1
db.Model(&User{}).Where("sex = ?",1).Update("name","xiaohong")
如果你想手动将某个字段set为空值, 可以使用单独选定某些字段的方式来更新:
user := User{Id:1}
db.Model(&user).Select("name").Update(map[string]interface{}{"name":"","age":0})
func(user *User)query()(u []User){//查询所有记录
db.Find(&u)//Find方法可以带 where 参数
db.Find(&u,"id > ? and age > ?",2,12)//带where 子句的查询,注意where要在find前面
db.Where("id > ?",2).Find(&u)// where name in ("xiaoming","xiaohong")
db.Where("name in (?)",[]string{"xiaoming","xiaohong"}).Find(&u)//获取第一条记录,按照主键顺序排序
db.First(&u)//First方法可以带where 条件
db.First(&u,"where sex = ?",1)//获取最后一条记录,按照主键顺序排序//同样 last方法也可以带where条件
db.Last(&u)return u
}
//使用Struct,相当于:select * from user where age =12 and sex=1
db.Where(&User{Age:12,Sex:1}).Find(&u)//等同上一句
db.Where(map[string]interface{}{"age":12,"sex":1}).Find(&u)
not 条件的使用
//where name not in ("xiaoming","xiaohong")
db.Not("name","xiaoming","xiaohong").Find(&u)//同上
db.Not("name",[]string{"xiaoming","xiaohong"}).Find(&u)
or 的使用
//where age > 12 or sex = 1
db.Where("age > ?",12).Or("sex = ?",1).Find(&u)
order by 的使用
//order by age desc
db.Where("age > ?",12).Or("sex = ?",1).Order("age desc").Find(&u)
db.Table("user u").Select("u.name,u.age").Joins("left join user_ext ue on u.user_id = ue.user_id").Row()
如果有多个连接,用多个Join方法即可。
原生函数
db.Exec("DROP TABLE user;")
db.Exec("UPDATE user SET name=? WHERE id IN (?)","xiaoming",[]int{11,22,33})
db.Exec("select * from user where id > ?",10).Scan(&user)