介绍
怎么在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实现一个多条件筛选查询功能