怎么在golang中利用gorm实现一个多条件筛选查询功能

  介绍

怎么在golang中利用gorm实现一个多条件筛选查询功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

gorm链式操作

方法链接,gorm实现了链式操作接口,所以你可以把代码写成这样:

//,创建一个查询   tx :=, db.Where (“name =, ?“,,“jinzhu")//,添加更多条件   if  someCondition  {=,,tx  tx.Where (“age =, ?“,, 20)   },{else =,,tx  tx.Where (“age =, ?“,, 30)   }   if  yetAnotherCondition  {=,,tx  tx.Where (“active =, ?“,, 1)   }

结合筛选动态的案例,代码如下:

func  (xy  *主题),GetTopicListByTimeGenderAddress (gender  createTime也,int,日期,cityName 字符串,adsID  int64), (TopicList []的主题),{   ,//先创建一个查询   ,tx :=, Db.Model(及xy)。(“ads_id =, ?,以及status =, 1“,, adsID)   ,//分类   ,if  adsID 祝辞,0,{=,,tx  tx.Where (“ads_id =, ?“,, adsID)   ,}   ,//按照创建时间筛选   ,if  createTime 祝辞,0,{=,,tx  tx.Order (“create_time  desc")   ,}else  {   ,//按照活动时间筛?,,tx  tx.Order (“date_timestamp  asc")   ,}   ,if  gender 祝辞,0,{=,,tx  tx.Where (“gender =, ?“,,性别)   ,}   ,if  cityName  !=,““, {=,,tx  tx.Where (“city_name =, ?“,, cityName)   ,}=,,tx  tx.Preload (“TopicImagesList")   ,tx.Find(及TopicList) .RecordNotFound ()   return  TopicList   }

<>强补充:golang: gorm不定条件查询和分页操作

gorm +杜松子酒不定条件查询和分页操作

gorm +杜松子酒不定条件查询

不定参数参数多用于在表后端的多条件筛选,这样的场景是无法预知用户需要使用那些筛选条件。只有当参数传递给后端时才清楚。所以后端需要根据传递的参数动态生成符合查询条件的sql语句或者orm操作。

<强>在gorm可以分别任选上述两种中的任意一种:

1. orm操作,

2。拼接原生sql语句;

本文建议大家使用orm操作,以用户结构用户为例,假设用户的格式如下:

type  User  struct  {   gorm.Model才能   ,,Birthday  time.Time   Age 才能,,,,int   Name 才能,,,,,string “gorm:“大小:255“;”   Num 才能,,,,,int ,,“gorm:“AUTO_INCREMENT"”   Sex 才能,,,,,string “gorm:“大小:“;”   }

假设年龄、姓名和矿工工会是不定查询条件,前端的请求格式如下:

http://127.0.0.1:10090/user/?年龄=26,name=zhangchi

后端逻辑处理如下。

 var  db  * gorm.DB ,//,已经进行了db的初始化操作,db为全局变量
  func  getuser (c  * gin.Context), {
  users 才能:=,([]的用户,,0)
  Db 才能;:=,Db ,,
  if 年龄、才能,isExist :=, c.GetQuery (“age");, isExist ==, true  {
  ,,,,_  ageInt:=, strconv.Atoi(年龄)
  ,,,Db =, Db.Where (“age =, ?“,, ageInt)
  ,,}
  if 才能,num, isExist :=, c.GetQuery (“num");, isExist ==, true  {
  ,,,,_  numInt:=, strconv.Atoi (num)
  ,,,Db =, Db.Where (“num =, ?“,, numInt)
  ,,}
  if 名字,才能,isExist :=, c.GetQuery (“name");, isExist ==, true  {
  ,,,Db =, Db.Where (“name =, ?“,,名字)
  ,,}
  if 才能;err :=, Db.Find(和用户). error;, err  !=, nil  {
  ,,,fmt.Println (err.Error ())
  ,,}
  c.JSON才能(http.StatusOK, gin.H {
  ,,,“data":,用户,
  })才能
  }

请求网址后,可以看到在调试模式下sql的执行语句是:

(2018 - 09 - 03, 18:47:26],[1.03]女士,SELECT  *,得到的用户,WHERE 用户。“deleted_at”, IS  NULL 以及((=age  & # 39; 26 & # 39;),以及(=name  & # 39; zhangchi& # 39;)),   [13,rows  affected 或是returned ],   (杜松子酒),2018/09/03 安康;18:47:26  |, 200, |,, 1.263889小姐|,,,,127.0.0.1  |, GET ,,/user/?年龄=26,name=zhangchi

这里需要注意一个细节,首先将全局的db变量赋值给了db,如果用db直接进行操作,那一系列的赋值语句将会影响db的地址,影响后续的数据库操作。

Db:=Db

分页操作

分页操作是为了减少前端对后端请求的压力,对于一个系统,为了提高访问效率,不需要每次从后端请求全量的数据,采用分页的方式,获取指定页码的数据,页数(页面)和每页的大小(页大小)都可以单独指定。

怎么在golang中利用gorm实现一个多条件筛选查询功能