- 数据表字段映射
type AppInfo struct {
AppId int64 `gorm:"column:app_id" json:"appId" form:"appId"`
Name string `gorm:"column:name" json:"name" form:"name"`
Desc string `gorm:"column:desc" json:"desc" form:"desc"`
AppType int64 `gorm:"column:app_type" json:"appType" form:"appType"`
ApplyUser string `gorm:"column:apply_user" json:"applyUser" form:"applyUser"`
RdManager string `gorm:"column:rd_manager" json:"rd_manager" form:"rd_manager"`
PmManager string `gorm:"column:pm_manager" json:"pmManager" form:"pmManager"`
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
}
通过column指定数据表的映射字段
-
查询字段并映射到结构体中 Find() Scan() Find()将查询的数据映射到和数据表对应的model中,而Scan()可以把字段映射到自定义结构体中.
- 指定的字段查询
ReadDB.Table(TableApplyInfo).Select("apply_info.id as id,apply_info.app_id as app_id,apply_info.audit_status as audit_status,apply_desc as apply_desc,apply_type as apply_type,apply_service_name as apply_service_name,c.category as category,apply_info.created_at as created_at,apply_info.audit_user as audit_user,apply_info.audit_time as audit_time,apply_info.audit_result as audit_result").Joins("join service_config c on apply_info.apply_service_name=c.name").Where("apply_info.apply_user=?", userName).Order("apply_info.created_at desc").Offset((req.Page - 1) * req.PageSize).Limit(req.PageSize).Scan(&records)
- 执行原生sql
err := WriteDB.Exec("UPDATE user_info SET joined_app_ids = IF(joined_app_ids = '', ?, CONCAT(joined_app_ids, ?)) WHERE user_name = ?", appID, ","+strconv.Itoa(int(appID)), username).Error
- Where条件的拼接
某些情况下需要做条件查询,此时就需要做Where条件的拼接.依旧以上边的sql为例
queryConn := ReadDB.Table(TableApplyInfo).Select("apply_info.id as id,apply_info.app_id as app_id,apply_info.audit_status as audit_status,apply_desc as apply_desc,apply_type as apply_type,apply_service_name as apply_service_name,c.category as category,apply_info.created_at as created_at,apply_info.audit_user as audit_user,apply_info.audit_time as audit_time,apply_info.audit_result as audit_result").Joins("join service_config c on apply_info.apply_service_name=c.name").Where("apply_info.apply_user=?", userName) if req.AuditStatus >= 0 { queryConn = queryConn.Where("apply_info.audit_status =?", req.AuditStatus) } if req.AppId > 0 { queryConn = queryConn.Where("apply_info.app_id=?", req.AppId) } if len(req.Category) > 0 { if len(req.SubCategory) > 0 { queryConn = queryConn.Where("c.category=?", req.Category+"_"+req.SubCategory) } else { queryConn = queryConn.Where("c.category like ?", req.Category+"_%") } } if len(req.ServiceName) > 0 { queryConn = queryConn.Where("apply_info.apply_service_name=?", req.ServiceName) } if len(req.StartTime) > 0 { queryConn = queryConn.Where("apply_info.created_at>=?", req.StartTime+" 00:00:00") } if len(req.EndTime) > 0 { queryConn = queryConn.Where("apply_info.created_at<=?", req.EndTime+" 23:59:59") } queryConn.Count(&count) err := queryConn.Order("apply_info.created_at desc").Offset((req.Page - 1) * req.PageSize).Limit(req.PageSize).Scan(&records).Error