- 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
自动将多行数据,写入切片中,不需要迭代操作。
- 另一种多行查询方法