go语言对gorm不固定条件查询封装_cqims21的博客-程序员宝宝

技术标签: gorm  go  

主要对gorm不定条件查询数据时的一个封装【灵感来于laravel项目中对db的封装laravel版本DB,EloquentORM不固定条件查询封装

封装方法在 app/models/entity/Gorm.go文件里

条件说明

[“字段名”,“操作符”,“查询值”,“与前一个条件的关系[默认and]”] \

1.如果是等于,可以省略"操作符" :
[]interface{}{“username”, “chen”} 或 []interface{}{“username”,"=" , “chen”}

2.大于:
[]interface{}{“createtime”, “>”, “2019-1-1”}

3.如果为or,那就得一写全:
[]interface{}{“username”, “=”, “chen”, “or”}

4.其它的where兼容gorm的where方法

测试

启动项目

go run main.go

访问测试地址:
http://127.0.0.1:8100/api/v1/user/test

带分页的地址:http://127.0.0.1:8100/api/v1/user/list

1、and条件测试

where := []interface{}{
	[]interface{}{"id", "=", 1},
	[]interface{}{"username", "chen"},
}
db, err = entity.BuildWhere(db, where)
db.Find(&users)
// SELECT * FROM `users`  WHERE (id = 1)and(username = 'chen')

2、结构体条件测试

where := user.User{ID: 1, UserName: "chen"}
db, err = entity.BuildWhere(db, where)
db.Find(&users)
// SELECT * FROM `users`  WHERE (id = 1) and (username = 'chen')

3、in,or条件测试

where := []interface{}{
	[]interface{}{"id", "in", []int{1, 2}},
	[]interface{}{"username", "=", "chen", "or"},
}
db, err = entity.BuildWhere(db, where)
db.Find(&users)
// SELECT * FROM `users`  WHERE (id in ('1','2')) OR (username = 'chen')

3.1、not in,or条件测试

where := []interface{}{
	[]interface{}{"id", "not in", []int{1}},
	[]interface{}{"username", "=", "chen", "or"},
}
db, err = entity.BuildWhere(db, where)
db.Find(&users)
// SELECT * FROM `users`  WHERE (id not in ('1')) OR (username = 'chen')

4、map条件测试

where := map[string]interface{}{"id": 1, "username": "chen"}
db, err = entity.BuildWhere(db, where)
db.Find(&users)
// SELECT * FROM `users`  WHERE (`users`.`id` = '1') AND (`users`.`username` = 'chen')

5、and,or混合条件测试

where := []interface{}{
	[]interface{}{"id", "in", []int{1, 2}},
	[]interface{}{"username = ? or nickname = ?", "chen", "yond"},
}
db, err = entity.BuildWhere(db, where)
db.Find(&users)
// SELECTSELECT * FROM `users`  WHERE (id in ('1','2')) AND (username = 'chen' or nickname = 'yond')

//注:不要使用下方方法
/*
where := []interface{}{
	[]interface{}{"id", "in", []int{1, 2}},
	[]interface{}{
		[]interface{}{"username", "=", "chen"},
		[]interface{}{"username", "=", "yond", "or"},
	},
}
// 返回sql: SELECT * FROM `users`  WHERE (id in ('1','2')) AND (username = 'chen') OR (username = 'yond')
// 与设想不一样
// 经过测试,gorm底层暂时不支持db.Where(func(db *gorm.DB) *gorm.DB {})闭包方法
*/

####还支持分页查询,详见github
基于gin写的一个demo框架
https://github.com/qicmsg/go_vcard

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cqims21/article/details/103604914

智能推荐

将分支代码合并到master和将master代码合并到dev_weixin_34355559的博客-程序员宝宝

两种合并分支的方法:都保证在合到的那个分支上面;A合并到B,即保证当前在B分支上。A merge B是把A中的改动放到B分支上,B merge A是把B中的改动merge到A中,例如把master分支上的改动移到分支fb_xhf上,可以这样merge。1.转到master分支上,然后更新master最新更新。2.再转到fb_xhf上,然后在Loca...

sort函数 return -1 0 1的不同_圣焱的博客-程序员宝宝

数组arr里面的数字大小排序。arr.sort()如果里面没有函数,则默认按照最大位数的值的大小依次从小到大排序,即升序。例:let arr = [13,5,8,7,26,47,3];arr.sort();//[13,26,3,47,5,7,8]当有函数且每个元素为纯数字时arr.sort(function(a,b){return a-b;})//[3,6,7,8,13,26,47]此时为升序,即从小到大排序。当a-b>0时,a>b,相当于return 1,ab之间交换;当

虚拟化知识点_weixin_33849215的博客-程序员宝宝

17.PV与HVMParavirtual (PV)半虚拟化可以在没有显式虚拟化支持的主机硬件上运行,但无法利用特殊硬件扩展(如增强联网或 GPU 处理)。以往,半虚拟化在许多情况下的性能要优于硬件虚拟机,但是由于硬件虚拟机虚拟化的功能增强以及硬件虚拟机 AMI 可使用半虚拟化驱动程序,因此情况发生了改变。Hardware Virtual Machine (HVM)Windows Azur...

[硬件]SICK LMS111激光扫描仪使用_weixin_33965305的博客-程序员宝宝

1.电源接入电源线5Pin,4芯。棕色线接入正极,蓝色线接入负极(直流电,地线)。LMS111-100默认的电压范围是10-30V,推荐使用24V,我这里使用的是12V/3A的锂电池。另外两根白色(+)和黑色(ground)的是加热用的,正常温度应该不需要。西克中国的工程师跟我说使用12V的会减少使用寿命。2D LiDAR 传感器LMS1xx / LMS11x / Outdoor原装...

Commons CLI使用_wangyang_software的博客-程序员宝宝

原来粗略的浏览过apache Commons CLI,今天有个项目用到了,竟然没有印象,又重新浏览了一下,在此纪录一下。Apache Commons CLI library为用户提供了一个解释命令行的API.它在解释命令行时主要有三个状态,即:定义、解释和询问交互。代码如下,具体实现通过注释表示:package com.apache.common.cli.demo;import

java ssl 算法_JAVA 暴露的一些常用加密算法_weixin_39610956的博客-程序员宝宝

来自Providersecurity.provider.1=sun.security.provider.Sunsecurity.provider.2=sun.security.rsa.SunRsaSignsecurity.provider.3=sun.security.ec.SunECsecurity.provider.4=com.sun.net.ssl.internal.ssl.Provider...

随便推点

iOS开发之多媒体篇-仿QQ音乐播放器思路_浪里嘚小海豚的博客-程序员宝宝

QQ音乐项目共分为界面布局、切歌与播放、歌词显示、滑动歌词界面布局和播放、后台播放、锁屏界面、远程控制事件、打断处理8个功能。主要是复习原来学习的知识和将新知识用到实际项目中来。项目功能和牵扯的知识点还是比较多,大家应多复习一下。=================================================================================

Hibernate 使用过程中(尤其是多对多关联中的级联保存和级联删除)的注意事项_hibernate 同一事务先删除在保存_csdn_phy的博客-程序员宝宝

(转载)Hibernate 使用过程中(尤其是多对多关联中的级联保存和级联删除)的注意事项一.先上知识点:1.hibernate多对多关联关系中最重要的参数是(基于配置文件xxx.hbm.xml文件形式):1):inverse属性,如果设置inverse=“true”就代表让对方参与维护第三方表格。//这个属性特别重要,多对多关系中最好有且只有一个维护第三方表格,如果两方都维护第三

py-mongdb语法_孙小悦有大世界的博客-程序员宝宝

mongdb语法一、进入退出mongo二、库操作三、集合操作四、数据操作的增删改查1. 插入数据2. 删除数据3. 更新数据4. 查询数据五、使用python操作MongoDB(一)连接器(二)主要方法mongdb语法 “面向集合”(Collection-Oriented),意思是数据被分组存储在数据集中,被称为一个集合(Collecti...

用 CloudStack 配置和管理一个简单云_/var/cache/cloudstack/management/[email protected]的博客-程序员宝宝

CloudStack 在 IaaS 市场的背景和主要竞争对手oudStack 在 IaaS 市场的背景和主要竞争对手随着亚马逊在公有云和 VMware 在私有云方面的成功,各类企业纷纷在云时代迈出了自己的步伐,这些企业希望在自身的计算资源(主机,网络,存储)虚拟化过程中能够获得强大功能的同时,又维持相对低廉的成本。这正是 IaaS 供应商们发展的动力。IaaS 提供了对资源的自动化管理

创建SharePoint Business Data Connectivity Service Application_connectivity_service_SPFarmer的博客-程序员宝宝

SharePoint中的Business Data ConnectivityService是一个非常有用的功能,使用这个service,可以很容易的和外部的系统(database,web service,第三方系统)等进行交互,可以把外部系统的数据导入到SharePoint列表里,并在里面进行修改。 首先需要建一个service application。进入到SharePoint管理中心,

VM-CtenOS-8+Linux-8+LANMP环境中安装phpMyAdmin_ctenos8_sngee的博客-程序员宝宝

VM-16+CtenOS-8+Linux-8+LANMP环境中安装phpMyAdmin &快速使用-完整版文章目录VM-16+CtenOS-8+Linux-8+LANMP环境中安装phpMyAdmin &快速使用-完整版@[toc]==【教程大纲】==P-00) 运行环境配置P-01) 源码编译安装 `Nginx` 的方法P-02) 源码编译安装 `Apache` 的方法P-03) 源码编译安装 `MySQL` 的方法P-04) 源码编译安装 `PHP` 的方法P-05) phpMyAd

推荐文章

热门文章

相关标签