不积跬步,无以至千里

gorm基本


  1. 数据表字段映射
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指定数据表的映射字段

  1. 查询字段并映射到结构体中 Find() Scan() Find()将查询的数据映射到和数据表对应的model中,而Scan()可以把字段映射到自定义结构体中.

  2. 指定的字段查询
     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)
    
  3. 执行原生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
    
  4. 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