对于部分比较特殊的服务,比如根据关键字、创建时间等查询获取用户信息,我们需要设计便于维护的数据结构,我们建议将查询条件封装到一个结构体中,具体操作如下
1、在model目录下定义用户信息查询条件结构体UserArg.go
package modeltype UserArg struct { PageArg ttype string `form:"ttype" json:"ttype"`}
其中PageArg结构体是一个公用的结构体,它定义了常用的查询条件如时间范围Datafrom,Dateto,关键字Kname,以及分页起始页pagefrom,分页大小pagesize,asc排序字段,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.UserArg ctx.ShouldBind(&userArg) ret := userService.Query(userArg) //最后响应数据列表到前端
restgo.ResultList(ctx,ret,1024)
}
本文源代码源代码获取地址 https://github.com/winlion/restgo
10.2 天天任务清单小程序
https://github.com/winlion/dailytask
10.3 工业大数据采集
10.4 restgo cms
10.5 restgo 千人大群
作者简介:胡文林,持续创业者,长期从事技术开源工作。微信号jiepool-winlion
