1. 程式人生 > >golang實戰使用gin+xorm搭建go語言web框架restgo詳解6.4 推薦程式設計方式

golang實戰使用gin+xorm搭建go語言web框架restgo詳解6.4 推薦程式設計方式

6.4 高階查詢

對於部分比較特殊的服務,比如根據關鍵字、建立時間等查詢獲取使用者資訊,我們需要設計便於維護的資料結構,我們建議將查詢條件封裝到一個結構體中,具體操作如下

1、在model目錄下定義使用者資訊查詢條件結構體UserArg.go

package modeltype UserArg struct {   PageArg   ttype string `form:"ttype" json:"ttype"`}

其中PageArg結構體是一個公用的結構體,它定義了常用的查詢條件如時間範圍Datafrom,Dateto,關鍵字Kname,以及分頁起始頁pagefrom,分頁大小pagesizeasc

排序欄位,desc排序欄位等。

type PageArg struct {   Kword string `form:"kword"`Datefrom time.Time `form:"datefrom" time_format:"2006-01-02 15:04:05"`Dateto time.Time   `form:"dateto" time_format:"2006-01-02 15:04:05"`Pagesize int       `form:"pagesize" json:"pagesize"`Pagefrom int       `form:"pagefrom" json:"pagefrom"  validate:"gte=0"`

Desc string        `form:"desc" json:"desc"`Asc  string        `form:"asc" json:"asc"`}

2、在UserService.go中定義通用查詢方法Query

func (service *UserService)Query(arg model.UserArg)([]entity.User){var users []entity.User = make([]entity.User , 0)   orm := restgo.OrmEngin("ds1")   t := orm.Where("id>0")if (0<len(arg.Kword)){

      t = t.Where("name like ?","%"+arg.Kword+"%")   }if (!arg.Datefrom.IsZero()){      t = t.Where("create_at >= ?",arg.Datefrom)   }if (!arg.Dateto.IsZero()){      t = t.Where("create_at <= ?",arg.Dateto)   }   t.Limit(arg.GetPageFrom()).Find(&users)return  users}

3、在UserController.go中呼叫Query方法

func (ctrl *UserController)query(ctx *gin.Context){var userArg model.UserArgctx.ShouldBind(&userArg)ret := userService.Query(userArg)//最後響應資料列表到前端

restgo.ResultList(ctx,ret,1024)

}

待提供原始碼清單

10.1 restgo後臺管理框架

https://github.com/winlion/restgo-admin

10.天天任務清單小程式

https://github.com/winlion/dailytask

10.工業大資料採集

10.restgo cms 

10.restgo 千人大群


作者簡介:胡文林,持續創業者,長期從事技術開源工作。微訊號jiepool-winlion