当前位置: 首页 > news >正文

做电脑网站手机能显示/seo包年优化平台

做电脑网站手机能显示,seo包年优化平台,网站建设品牌推荐,网站建设费走什么费用golang gorm通过泛型实现通用单表增删改 无废话,直接上代码 想实现通用,首先得实现查询的通用,可以用传递map实现 func Where(where map[string]interface{}) func(db *gorm.DB) *gorm.DB {return func(db *gorm.DB) *gorm.DB {dbTmp : db…

golang gorm通过泛型实现通用单表增删改

无废话,直接上代码

想实现通用,首先得实现查询的通用,可以用传递map实现

func Where(where map[string]interface{}) func(db *gorm.DB) *gorm.DB {return func(db *gorm.DB) *gorm.DB {dbTmp := dbfor ko, value := range where {koSlice := strings.Split(ko, "#")var key, op stringif len(koSlice) == 1 {key = koif php2go.InArray(key, []string{"select", "order", "offset", "limit"}) {op = ko} else {op = "eq"}} else {key = koSlice[0]op = koSlice[1]}switch op {case "eq":dbTmp.Where(key+" = ?", value)case "neq":dbTmp.Where(key+" != ?", value)case "gt":dbTmp.Where(key+" > ?", value)case "gte":dbTmp.Where(key+" >= ?", value)case "lt":dbTmp.Where(key+" < ?", value)case "lte":dbTmp.Where(key+" <= ?", value)case "like":dbTmp.Where(key+" like ?", "%"+value.(string)+"%")case "in":dbTmp.Where(key+" in ?", value)case "notin":dbTmp.Where(key+" not in ?", value)case "between":dbTmp.Where(key+" between ? and ?", value.([]int)[0], value.([]int)[1])case "betweens":dbTmp.Where(key+" between ? and ?", value.([]string)[0], value.([]string)[1])case "select":dbTmp.Select(value.(string))case "order":dbTmp.Order(value.(string))case "offset":dbTmp.Offset(value.(int))case "limit":dbTmp.Limit(value.(int))}}return dbTmp}
}

调用方式

examleWhere := map[string]interface{}{"name#like":           data.ToUserName,"id":        		   data.UserID,"create_time#between": []int{17000000, 18000000},"grade#in":            []int{3,4},"order":               "id desc",}
Gorm().Table("xxx").Scopes(Where(examleWhere)).xxx打印 sql:
select * from xxx where name like "%xx%" and id = xxx and create_time between 17xxx and 18xxx and grade in (3,4) order by id desc

通用查询

type FieldType interface {uint | uint8 | uint16 | uint32 | uint64 | int | int8 | int16 | int32 | int64 | float32 | float64 | string
}
func Get[T any](where map[string]interface{}, field ...string) (ret T, err error) {db := sys.Gorm().Scopes(Where(where)).Where("delete_time = 0")if len(field) > 0 {db.Select(field)}err = db.Find(&ret).Errorreturn
}func GetVal[T FieldType](tableName string, where map[string]interface{}, field string, includeDel ...bool) (ret T, err error) {db := sys.Gorm().Table(tableName).Scopes(Where(where)).Select(field)if len(includeDel) > 0 && includeDel[0] == true {db.Unscoped()} else {db.Where("delete_time = 0")}err = db.Find(&ret).Errorreturn
}func Gets[T any](where map[string]interface{}, field ...string) (ret []T, err error) {db := sys.Gorm().Scopes(Where(where)).Where("delete_time = 0")if len(field) > 0 {db.Select(field)}err = db.Find(&ret).Errorreturn
}func GetSlice[T FieldType](tableName string, where map[string]interface{}, field string, includeDel ...bool) (ret []T, err error) {ret = make([]T, 0)db := sys.Gorm().Table(tableName).Scopes(Where(where)).Select(field)if len(includeDel) > 0 && includeDel[0] == true {db.Unscoped()} else {db.Where("delete_time = 0")}err = db.Find(&ret).Errorreturn
}func Update[T any](where map[string]interface{}, update T) (err error) {db := sys.Gorm()err = db.Scopes(Where(where)).Updates(update).Errorreturn
}func UpdateByMap(table string, where, update map[string]interface{}) (err error) {db := sys.Gorm().Table(table)err = db.Scopes(Where(where)).Updates(update).Errorreturn
}func UpdateByMapTx(tx *gorm.DB, table string, where, update map[string]interface{}) (err error) {db := tx.Table(table)err = db.Scopes(Where(where)).Updates(update).Errorreturn
}// Create
// doUpdate: on duplicate key update : all, []string{}...
func Create[T any](data *[]T, doUpdate ...string) (err error) {var db *gorm.DBif len(doUpdate) > 0 {if doUpdate[0] == "all" {db = sys.Gorm().Clauses(clause.OnConflict{UpdateAll: true,}).Scopes()} else {db = sys.Gorm().Clauses(clause.OnConflict{DoUpdates: clause.AssignmentColumns(doUpdate),}).Scopes()}} else {db = sys.Gorm().Scopes()}err = db.Create(&data).Errorreturn
}func CreateTx[T any](tx *gorm.DB, data *T, doUpdate ...string) (err error) {if len(doUpdate) > 0 {if doUpdate[0] == "all" {tx.Clauses(clause.OnConflict{UpdateAll: true,}).Scopes()} else {tx.Clauses(clause.OnConflict{DoUpdates: clause.AssignmentColumns(doUpdate),}).Scopes()}}err = tx.Create(&data).Errorreturn
}func CreatesTx[T any](tx *gorm.DB, data *[]T, doUpdate ...string) (err error) {if len(doUpdate) > 0 {if doUpdate[0] == "all" {tx.Clauses(clause.OnConflict{UpdateAll: true,}).Scopes()} else {tx.Clauses(clause.OnConflict{DoUpdates: clause.AssignmentColumns(doUpdate),}).Scopes()}}err = tx.Create(&data).Errorreturn
}

给出调用方式案例

model.Get[model.WwStaff](map[string]interface{}{"corp_id": req.CorpId, "userid": req.StaffUserid})model.GetVal[int]("table_name", map[string]interface{}{"corp_id":     corpId,"dept_id":     deptId,"delete_time": 0,}, "parentid")model.GetSlice[int64]("table_name",map[string]interface{}{"staff_id": req.Id}, "id")// insert ...
model.Create(&tableModel)
// insert ... ON DUPLICATE KEY UPDATE id = VALUES(id) ......
model.Create(&tableModel, "id", "update_time")model.UpdateByMap("table_name",map[string]interface{}{"id#in": roomUnionIds},map[string]interface{}{"upload": 2})model.UpdateByMapTx(tx, "table_name",map[string]interface{}{"id#in": roomUnionIds},map[string]interface{}{"upload": 2})

可以依照代码,写出其它灵活的使用方式
结束

相关文章:

golang gorm通过泛型实现通用单表增删改

golang gorm通过泛型实现通用单表增删改 无废话&#xff0c;直接上代码 想实现通用&#xff0c;首先得实现查询的通用&#xff0c;可以用传递map实现 func Where(where map[string]interface{}) func(db *gorm.DB) *gorm.DB {return func(db *gorm.DB) *gorm.DB {dbTmp : db…...

十、K8S之ConfigMap

ConfigMap 一、概念 在K8S中&#xff0c;ConfigMap是一种用于存储配置数据的API对象&#xff0c;一般用于存储Pod中应用所需的一些配置信息&#xff0c;或者环境变量。将配置于 Pod 分开&#xff0c;避免应为修改配置导致还需要重新构建 镜像与容器。 二、创建 可以使用 ku…...

python飞书群机器人通过webhook发送消息

python飞书群机器人通过webhook发送消息 import json import loggingimport requestslogger logging.getLogger(__name__) logging.basicConfig(levellogging.DEBUG)class FeishuTalk:"""飞书群机器人通过webhook发送消息"""def __init__(self…...

埃隆·马斯克的 AI 聊天机器人 Grok 已经上线

昨天&#xff0c;埃隆马斯克 (Elon Musk) 通过他的公司 xAI 推出了一款名为 Grok 的新型人工智能聊天机器人。这款新的聊天机器人将通过 Twitter 更新实时获取世界知识&#xff0c;使其成为最新的对话 AI 系统。 Grok 的独特和基本优势在于它可以通过 &#x1d54f; 平台实时了…...

【代码随想录】算法训练营 第十五天 第六章 二叉树 Part 2

102. 二叉树的层序遍历 层序遍历&#xff0c;就是一层一层地遍历二叉树&#xff0c;最常见的就是从上到下&#xff0c;从左到右来遍历&#xff0c;遍历的方法依然有两种&#xff0c;第一种是借助队列&#xff0c;第二种则是递归&#xff0c;都算是很简单、很容易理解的方法&am…...

使用ssl_certificate_by_lua指令动态加载证书

1、下载 OpenResty - 下载 根据自己系统选择下载&#xff0c;我的是64位 2、解压到目录 3、启动openresty 进入解压后的目录&#xff0c;执行nginx.exe 浏览器输入 http://localhost 查看是否正常。显示以下画面就表示没有问题。 接下来可以开始准备动态安装证书 4、使用o…...

Qt中Opencv转Qimage出现重影或者颜色不对

废话不多说 在qt中opencv获取的图像转qimage时出现重影原因&#xff1a; 图像数据的内存对齐可能会导致画面重影&#xff0c;如果出现误差转换出来的图就会出现重影 解决办法&#xff1a; cv::Mat image_bgr cv::imread(“example.jpg”); cv::Mat image_aligned; cv::copyMak…...

upload-labs-1

文章目录 Pass-01 Pass-01 先上传一个正常的图片&#xff0c;查看返回结果&#xff0c;结果中带有文件上传路径&#xff0c;可以进行利用&#xff1a; 上传一个恶意的webshell&#xff0c;里面写入一句话木马&#xff1a; <?php eval($_POST[cmd]); echo "hello&quo…...

【vite配置路径别名@】/启动配置

npm install types/node --save-dev npm install path --save import { defineConfig } from vite import vue from vitejs/plugin-vue // 配置别名 import { resolve } from "path";// https://vitejs.dev/config/ export default defineConfig({plugins: [vue()]…...

3. List

数据结构在Java集合中的对应关系 线性表【数组】 -> ArrayList 线性表【链表】-> LinkedList 队列 -> Queue -> LinkedList&#xff0c;PriorityQueue, ArrayBlockingQueue … etc. 双端队列 -> Deque -> ArrayDeque 栈 -> LinkedList 哈希表 -> Hash…...

Django初窥门径-oauth登录认证

引言 在现代Web应用程序中&#xff0c;用户身份验证和授权是至关重要的组成部分。Django&#xff0c;一个流行的Python Web框架&#xff0c;为用户身份验证提供了内置支持。本文将探讨如何创建和注册Django应用&#xff0c;自定义身份验证服务&#xff0c;配置AUTHENTICATION_…...

数学到底在哪里支撑着编程?

数学到底在哪里支撑着编程&#xff1f; 除了少数算法等明显相关情况外&#xff0c;说点日常的。 编程是个极度依赖逻辑的领域&#xff0c;逻辑严谨性好&#xff0c;你的编程工作会顺畅很多一-绝大多 数的bug都是最近很多小伙伴找我&#xff0c;说想要一些嵌入式的资料&#x…...

Python模块ADB的, 已经 pyadb

Python模块ADB的使用指南_笔记大全_设计学院 (python100.com) pip install adb Python 调用ADB_python 调用adb命令_实相实相的博客-CSDN博客 Python ADB.shell_command Examples, pyadb.ADB.shell_command Python Examples - HotExamples Gitee 极速下载/PyADB - 码云 - 开…...

猫头虎分享从Python到JavaScript传参数:多面手的数据传递术

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

注解汇总:Spring 常用的注解

前言 本栏目的内容已经讲完了&#xff0c;本案例将把案例中所有讲到的注解都汇总起来&#xff0c;方便日后的学习需要用到的时候能够快速的找到相应的注解。本案例将结合小案例一起做汇总&#xff0c;也想丹玉是再复习一遍讲过用过的注解。 一、注解汇总 1、Component Reposi…...

合肥工业大学操作系统实验5

✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :hfut实验课设 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永远是个观众。平台再好,你不参与,永远是局外人。能力再大,你不行动,只能看别人成功!没有人会关心你付出过多少…...

基于SpringBoot+Vue的点餐管理系统

基于springbootvue的点餐平台网站系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 菜品详情 个人中心 订单 管理员界面 菜品管理 摘要 点餐管理系统是一种用…...

C# 继承,抽象,接口,泛型约束,扩展方法

文章目录 前言模拟需求场景模拟重复性高的需求初始类结构继承优化抽象类 需求1&#xff1a;打印CreateTime方法1&#xff1a;使用重载方法2&#xff1a;基类函数方法3&#xff1a;泛型约束方法3.1&#xff1a;普通泛型方法方法3.2&#xff1a;高级泛型约束&#xff0c;扩展方法…...

mysql的备份和恢复

备份&#xff1a;完全备份 增量备份 完全备份&#xff1a;将整个数据库完整的进行备份 增量备份&#xff1a;在完全备份的基础之上&#xff0c;对后续新增的内容进行备份 备份的需求 1、在生产环境中&#xff0c;数据的安全至关重要&#xff0c;任何数据的都可能产生非常严重…...

【机器学习3】有监督学习经典分类算法

1 支持向量机 在现实世界的机器学习领域&#xff0c; SVM涵盖了各个方面的知识&#xff0c; 也是面试题目中常见的基础模型。 SVM的分类结果仅依赖于支持向量&#xff0c;对于任意线性可分的两组点&#xff0c;它 们在SVM分类的超平面上的投影都是线性不可分的。 2逻辑回归 …...

lv11 嵌入式开发 计算机硬件基础 1

目录 1 导学 1.1回顾及导学 1.2 嵌入式系统分层 1.3 linux底层开发 2 ARM体系结构与接口技术课程导学 3 计算机基础 3.1 计算机的进制 3.2 计算机组成 3.3 总线 4 多级存储结构与地址空间 4.1 多级存储概念 4.2 地址空间 5 CPU工作原理 6 练习 1 导学 1.1回顾及导…...

【Linux】vim

文章目录 一、vim是什么&#xff1f;二 、命令模式三、插入模式四、底行模式五、vim配置 一、vim是什么&#xff1f; Vim是一个强大的文本编辑器&#xff0c;它是Vi的增强版&#xff0c;支持多种语法高亮、插件扩展、多模式操作等功能。Vim有三种基本的工作模式&#xff1a;命…...

cstring函数

string 1.char str[]类型 fgets(s,10000,stdin) cin.getline(cin,10000) strlen(str) sizeof 求静态数组长度 2.string类型 getline(cin,a) cin.getline(cin,10000) str.lenth() str.size() cin 遇到空格就停止 3.gets 函数 char str[20]; gets(str); 4.puts 函…...

【owt】p2p client mfc 工程梳理

1年前构建的,已经搞不清楚了。所以梳理下,争取能用较新的webrtc版本做测试。最早肯定用这个测试跑通过 【owt】p2p Signaling Server 运行、与OWT-P2P-MFC 交互过程及信令分析官方的mfc客户端 估计是构造了多个不同的webrc版本的客户端...

pandas教程:Hierarchical Indexing 分层索引、排序和统计

文章目录 Chapter 8 Data Wrangling: Join, Combine, and Reshape&#xff08;数据加工&#xff1a;加入, 结合, 变型&#xff09;8.1 Hierarchical Indexing&#xff08;分层索引&#xff09;1 Reordering and Sorting Levels&#xff08;重排序和层级排序&#xff09;2 Summa…...

Redis 扩展 RedisBloom 插件,解决缓存击穿、穿透

文章目录 一、概述二、编译准备2.1 升级 make2.2 安装 Python3 三、编译 RedisBloom四、测试 RedisBloom五、应用场景5.1 缓存击穿5.2 缓存穿透5.3 原理总结 六、存在的问题 如果您对Redis的了解不够深入请关注本栏目&#xff0c;本栏目包括Redis安装&#xff0c;Redis配置文件…...

VBA技术资料MF80:选择文件及文件夹

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…...

网络层:控制平面

路由选择算法 路由选择算法就是为了在端到端的数据传输中&#xff0c;选择路径上路由器的最好的路径。通常&#xff0c;一条好的路径指具有最低开销的路径。最低开销路径是指源和目的地之间具有最低开销的一条路。 根据集中式还是分散式来划分 集中式路由选择算法&#xff1a…...

Ubuntu 系统内核 kernel panic

Ubuntu 系统内核 kernel panic 不能进入系统&#xff1a;报错end kernel panic -not syncing: attemped to kill init! exit code 0x00000100 系统启动的时候&#xff0c;按下‘e’键进入grub编辑界面&#xff0c;编辑grub菜单&#xff0c;选择“kernel /vmlinuz-XXXXro root…...

【flink】RowData copy/clone方式

说明&#xff1a;一般用户常用的是GenericRowData。flink内部则多使用BinaryRowData。 方法一、循环解决(不推荐)&#xff1a; 代码较为复杂需要根据RowType获取到内部fields的logicalType&#xff0c;再使用RowData.createFieldGetter方法创建fieldGetters。 public static …...