- Published on
gorm 使用笔记
- Authors
- Name
- JiGu
- @crypto20x
结构体字段名映射
// User 用户模型
type User struct {
gorm.Model
UserName string
PasswordDigest string
//Nickname string
Status string
Policy string
Avatar string `gorm:"size:1000"`
AbAc string
}
gorm自动建表字段则为
`user_name` varchar(255) DEFAULT NULL,
`password_digest` varchar(255) DEFAULT NULL,
`status` varchar(255) DEFAULT NULL,
`policy` varchar(255) DEFAULT NULL,
`avatar` varchar(1000) DEFAULT NULL,
`ab_ac` varchar(255) DEFAULT NULL,
结构为AbAb转换为ab_ab
分页查询
model.SensorDB.Table(s.ProjectTableName).Select(
"zhgd_building_tilt_monitoring.id,\n"+
"zhgd_building_tilt_monitoring.monitoring_project,\n"+
"zhgd_building_tilt_monitoring.this_change,\n"+
"zhgd_building_tilt_monitoring.history_change,\n"+
"zhgd_building_tilt_monitoring.rate_change,\n"+
"zhgd_building_tilt_monitoring.monitoring_date,\n"+
"zhgd_building_tilt_monitoring.sum_alarm_status,\n"+
"zhgd_building_tilt_monitoring.change_rate_alarm_status").
Limit(s.PageSize).
Offset((s.Page -1)*s.PageSize).
Rows()
Limit 设置每页数量 Offset 设置偏移参数,实现分页
迭代rows
for rows.Next(){
if err := rows.Scan(&data); err != nil{
return serializer.DBErr("rows迭代失败", err)
}
datas = append(datas, data)
}
只要row.Next()为真,则能一直迭代,直到全部查找完毕。 用Scan将每一行数据,写入到data数据结构中(不支持结构体)。 上面的写法不支持将数据scan到结构体中
多列多行分页查询
datas := make([]model.BuildingTilt,0)
err := model.SensorDB.Table(s.ProjectTableName).Select(
"id,\n"+
"monitoring_project,\n"+
"this_change,\n"+
"history_change,\n"+
"rate_change,\n"+
"monitoring_date,\n"+
"sum_alarm_status,\n"+
"change_rate_alarm_status").
Limit(s.PageSize).
Offset((s.Page -1)*s.PageSize).Scan(&datas).Error
自动将多行数据,写入切片中,不需要迭代操作。
- 另一种多行查询方法