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

go gorm 查询

  1. 定义model
package mysqltestimport ("errors""fmt""gorm.io/gorm"
)type Product struct {gorm.ModelID    uint    `gorm:"primarykey"`Name  string  `gorm:"column:name"`Price float64 `gorm:"column:price_value"`Test  string  `gorm:"-"`
}type Tabler interface {TableName() string
}// 修改表名
func (recv Product) TableName() string {return "product"
}// 钩子
func (recv *Product) BeforeCreate(tx *gorm.DB) (err error) {if recv.Name == "haha" {fmt.Println("不合法哈")return errors.New("不合法哈")} else {return nil}
}
  1. helper
package mysqltestimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/clause"
)var db *gorm.DBfunc Initdb() {dsn := "ellis:ellis@tcp(192.168.214.134:3306)/go_db?charset=utf8mb4&parseTime=True&loc=Local"var err errordb, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {panic(err)}
}func Create(value interface{}) {d := db.Create(value)fmt.Printf("d.RowsAffected: %v\n", d.RowsAffected)
}func InitTable(table interface{}) {db.AutoMigrate(table)
}// 根据选择的字段插入
func CreateBySelectFields(fields []string, value interface{}) {db.Select(fields).Create(value)
}// 批量插入
func CreateMulti(value interface{}) {d := db.Create(value)fmt.Printf("d.RowsAffected: %v\n", d.RowsAffected)
}// 批量插入
func CreateBatch(value interface{}) {d := db.CreateInBatches(value, 100)fmt.Printf("d.RowsAffected: %v\n", d.RowsAffected)
}// 忽略钩子
func CreateIgnoreHook(value interface{}) {db.Session(&gorm.Session{SkipHooks: true}).Create(value)
}// 通过map创建
func CreateByMap(value map[string]interface{}, model interface{}) {db.Model(model).Create(value)
}// 冲突啥也不做
func DoNothingWhenInsert(value interface{}) {db.Clauses(clause.OnConflict{DoNothing: true}).Create(value)
}// 通过主键查找
func FindByKey(value interface{}) {db.Find(value, 1)
}// 查找后映射到map类型
func FindAndConvertToMap(value interface{}, result *map[string]interface{}) {db.Model(value).First(result)
}// 多主键查找
func FindByMultiKey(value interface{}, keys []int) {db.Find(value, keys)
}// 条件查找
func FindByCondition(value interface{}) {db.Where("name=?", "haha").Order("id desc").Find((value))
}// struct 查找,会忽略0值,例如传入ID=0,这个ID=0不会作为查询条件
func FindByStruct(value interface{}, condition interface{}) {db.Where(condition).Find(value)
}// 指定结构体查询字段
func FindByStructWithReturnFields(value interface{}, condition interface{}, returnFields ...string) {db.Where(condition, returnFields).Order("id desc").Find(value)
}
  1. main
package mainimport ("ellis/mysqltest""fmt"
)func main() {mysqltest.Initdb()// 创建数据库mysqltest.InitTable(&mysqltest.Product{})var value mysqltest.Productmysqltest.FindByKey(&value)fmt.Printf("value: %v\n", value)// 映射到mapresult := map[string]interface{}{}mysqltest.FindAndConvertToMap(mysqltest.Product{}, &result)fmt.Printf("result: %v\n", result)// 多主键查找var products1 []mysqltest.Productmysqltest.FindByMultiKey(&products1, []int{1, 2, 3})for _, v := range products1 {fmt.Printf("v: %v\n", v)}// 条件查找var products2 []mysqltest.Productmysqltest.FindByCondition(&products2)for _, v := range products2 {fmt.Printf("v: %v\n", v)}// struct 查找var products3 []mysqltest.Product// ID 为0的被忽略produce := mysqltest.Product{Name: "haha", ID: 0}mysqltest.FindByStruct(&products3, produce)for _, v := range products3 {fmt.Printf("v: %v\n", v)}// map 查找var products4 []mysqltest.Product// ID 为0的被忽略produce1 := map[string]interface{}{"Name": "haha", "ID": 0}mysqltest.FindByStruct(&products4, produce1)for _, v := range products4 {fmt.Printf("v: %v\n", v)}// struct 查找,可以设置使用的struct的keyvar products []mysqltest.Product// ID 为0的被忽略produce2 := mysqltest.Product{Name: "haha"}mysqltest.FindByStructWithReturnFields(&products, produce2, "name", "id")for _, v := range products {fmt.Printf("v: %v\n", v)}
}

https://gorm.io/docs/query.html

https://gorm.io/docs/advanced_query.html

相关文章:

go gorm 查询

定义model package mysqltestimport ("errors""fmt""gorm.io/gorm" )type Product struct {gorm.ModelID uint gorm:"primarykey"Name string gorm:"column:name"Price float64 gorm:"column:price_value&quo…...

Flutter GetXController 动态Tabbar 报错问题

场景: 1.Tabbar的内容是接口获取的 2. TabController? tabController;; 在onInit 方法中初始化tabbarController tabController TabController(initialIndex: 0, length: titleDataList.length, vsync: this); 这时候会报一个错误 Controllers l…...

Redis(缓存预热,缓存雪崩,缓存击穿,缓存穿透)

目录 一、缓存预热 二、缓存雪崩 三、缓存击穿 四、缓存穿透 一、缓存预热 开过车的都知道,冬天的时候启动我们的小汽车之后不要直接驾驶,先让车子发动机预热一段时间再启动。缓存预热是一样的道理。 缓存预热就是系统启动前,提前将相关的…...

UE4/5Niagara粒子特效学习(使用UE5.1,适合新手)

目录 创建空模板 创建粒子 粒子的基础属性 粒子的生命周期 颜色 大小设置 生成的位置 Skeletal Mesh Location的效果: Shape Location 添加速度 添加Noise力场 在生成中添加: 效果: ​编辑 在更新中添加: 效果&…...

from moduleA import * 语句 和import moduleA 的区别

from moduleA import * 语句和import moduleA 的区别是: from moduleA import * 语句会将moduleA模块中的所有内容(函数、变量、类等)直接导入到当前模块的命名空间中,这样就可以直接使用它们,而不需要加上模块名的限…...

【leetcode 力扣刷题】交换链表中的节点

24. 两两交换链表中的节点 24. 两两交换链表中的节点两两节点分组,反转两个节点连接递归求解 24. 两两交换链表中的节点 题目链接:24. 两两交换链表中的节点 题目内容: 题目中强调不能修改节点内部值,是因为如果不加这个限制的话…...

学会Mybatis框架:让你的代码更具灵活性、可维护性、安全性和高效性【二.动态SQL】

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Mybatis的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.Mybatis动态SQL如何应用 1.需求 2.…...

Oracle 中 ROWNUM 使用问题记录

ROWNUM 使用问题记录(2023-08-17) Oracle 版本: 19.0.0.0.0 Enterprise现象:今天在项目遇到一个问题,测试人员反馈前一天能看到的数据今天看不到了 用表格举例,这是前一天看到的数据,有9、7、1 这几个数量信息 日期…...

MySQL数据库:内置函数

日期函数 规定:日期:年月日 时间:时分秒 函数名称作用描述current_date()当前日期current_time()当前时间current_timestamp()当前时间戳date(datetime)返回datetime参数的日期部分date_add(date,interval d_value_type)在date中添加…...

【C++杂货铺】探索string的底层实现

文章目录 一、成员变量二、成员函数2.1 默认构造函数2.2 拷贝构造函数2.3 operator2.4 c_str()2.5 size()2.6 operator[ ]2.7 iterator2.8 reserve2.9 resize2.10 push_back2.11 append2.12 operator2.13 insert2.14 erase2.15 find2.16 substr2.17 operator<<2.18 opera…...

c++ day1

定义一个命名空间Myspace&#xff0c;包含以下函数&#xff1a;将一个字符串中的所有单词进行反转&#xff0c;并输出反转后的结果。例如&#xff0c;输入字符串为"Hello World"&#xff0c;输出结果为"olleH dlroW"&#xff0c;并在主函数内测试该函数。 …...

变动的Python爬虫实现

在电商时代&#xff0c;了解商品价格的变动对于购物者和卖家来说都非常重要。本文将分享一种基于Python的实时监控电商平台商品价格变动的爬虫实现方法。通过本文的解决方案和代码示例&#xff0c;您将能够轻松监控商品价格&#xff0c;并及时做出决策。 一、了解需求和目标 在…...

mybatis-plus--配置-(sql)日志输出-自动填充-分页-多数据源-逻辑删除

写在前面&#xff1a; 本文主要介绍mybatis-plus的配置&#xff0c;以后在有的时候在补充。欢迎交流。 文章目录 日志输出自动填充分页全局字段配置多数据源 日志输出 调试的时候需要看执行的sql&#xff0c;这时候就很需要日志来记录查看了。 mybatis-plus的日志配置在yml…...

数据API服务管理功能:解放数据潜力,提升业务效率

数据API服务的重要性 在数字化时代&#xff0c;数据被认为是企业的重要资产。数据API服务的管理功能能够有效帮助企业实现数据的整合和利用。通过合理的数据API服务管理&#xff0c;企业可以更好地解放数据潜力&#xff0c;提升业务效率。 ​ 解放数据潜力 数据API服务管理功…...

云南森林火灾vr消防模拟安全演练系统训练消防员火灾和事故的适应和应对能力

据统计,每一场破坏性地震发生后,会引发次生的灾害,而火灾是其中之一。导致火灾的原因,推测是地震时使供电线路短路,引燃易燃物,火灾就随即发生。所以,在日常生活中,定期的消防演练还是非常必要的, VR消防&#xff0c;是VR公司深圳华锐视点利用VR虚拟现实技术&#xff0c;将VR和…...

(6)(6.2) 任务命令

文章目录 前言 6.2.1 概述 6.2.2 导航命令 6.2.3 条件命令 6.2.4 DO命令 前言 本文介绍了 Copter、Plane 和 Rover 切换到自动模式时支持的任务指令。 &#xff01;Warning 这是一项正在进行中的工作&#xff0c;尚未经过全面审核。有关 Copter 的更佳列表&#xff0c;请…...

【consul】

consul 一、什么是服务注册与发现1.11.2 二、 什么是consul2.1定义2.2特性2.2.1服务注册与发现&#xff1a;2.2.2健康检查&#xff1a;2.2.3Key/Value存储&#xff1a; 三、consul部署-datacenter &#xff1a;指定数据中心名称&#xff0c;默认是dc1。consul &#xff1a;指定…...

Electron环境搭建

Electron是一个优秀的开源框架&#xff0c;用于构建跨平台的桌面应用程序。它基于Chromium和Node.js&#xff0c;使得开发者可以使用Web技术&#xff08;HTML、CSS和JavaScript&#xff09;来构建可在Windows、macOS和Linux等多个操作系统上运行的应用程序。本文将介绍如何搭建…...

MinIO线上扩容实战

硬件投入肯定是随着业务的增长而增长&#xff0c;这就要求中间件平台必须提供水平伸缩机制&#xff0c;MinIO对象存储服务也不例外&#xff0c;本文就详细介绍MinIO的扩容。 Minio支持通过增加新的Server Pool来扩容老的集群。每个Server Pool都是一个相对独立的故障域&#x…...

【微服务】微服务的概论

微服务&#xff1a;构建面向为了解决这个问题&#xff0c;微服务架构应运而生。本文将向您介绍微服务的概念、优势、实现原理以及应用场景&#xff0c;带您领略微服务在构建面向未来的高效应用中的魅力。 一、微服务的概念和优势 微服务是一种将应用拆分为一系列小型、独立服…...

告别杂乱农场:星露谷物语规划神器助你打造高效田园

告别杂乱农场&#xff1a;星露谷物语规划神器助你打造高效田园 【免费下载链接】stardewplanner Stardew Valley farm planner 项目地址: https://gitcode.com/gh_mirrors/st/stardewplanner 你是否曾在星露谷物语中面对一片荒地感到无从下手&#xff1f;种植区域混乱、…...

Android开机向导定制实战:从源码分析到禁用状态栏的隐藏技巧

Android开机向导深度定制&#xff1a;从源码解析到状态栏控制实战 第一次接触Android开机向导定制时&#xff0c;我被这个看似简单却隐藏复杂逻辑的系统组件深深吸引。作为设备初始化的第一道门户&#xff0c;开机向导不仅承载着用户体验的第一印象&#xff0c;更是厂商品牌展示…...

OpenClaw+ollama-QwQ-32B自动化测试:从用例生成到结果分析

OpenClawollama-QwQ-32B自动化测试&#xff1a;从用例生成到结果分析 1. 为什么选择OpenClaw做测试自动化 作为一个长期与测试代码打交道的开发者&#xff0c;我一直在寻找能够真正减轻重复劳动的解决方案。传统的测试框架虽然成熟&#xff0c;但编写和维护测试用例仍然占据了…...

大数据运维 | 项目一:大数据分布式集群搭建全攻略

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 前言 作为一名大数据运维工程师&#xff0c;你是否遇到过这样的问题&#xff1a; 问题场景描述1机器A可正常上网&#xff0c;但机器B无法连接网…...

5V与3.3V MCU串口电平转换电路设计

不同工作电压MCU间的串口电平转换电路设计1. 项目概述1.1 问题背景在现代嵌入式系统设计中&#xff0c;经常遇到不同工作电压的微控制器(MCU)之间需要进行串口通信的场景。例如&#xff1a;MCU1工作电压&#xff1a;5VMCU2工作电压&#xff1a;3.3V若直接将两个MCU的TX、RX引脚…...

著名学者、顶尖大学教授近期失联

点击下方卡片&#xff0c;关注“CVer”公众号AI/CV重磅干货&#xff0c;第一时间送达点击进入—>【顶会/顶刊】投稿交流群添加微信号&#xff1a;CVer2233&#xff0c;小助手拉你进群&#xff01;扫描下方二维码&#xff0c;加入CVer学术星球&#xff01;可以获得最新顶会/顶…...

python基于微信小程序的直播带货商品数据分析系统的爬虫可视化

目录需求分析与系统架构设计微信小程序数据爬取方案数据存储与清洗数据分析与可视化系统集成与部署注意事项项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作需求分析与系统架构设计 明确系统目标为爬取微信小程序直播带货商品数…...

白城腾讯广告服务商

在白城&#xff0c;有不少企业想借助腾讯广告拓展业务&#xff0c;这就离不开靠谱的腾讯广告服务商。今天就和大家聊聊白城腾讯广告服务商的那些事儿&#xff0c;长春中网互联技术在这一领域表现就相当不错。白城腾讯广告服务商现状行业报告显示&#xff0c;近几年白城地区对腾…...

百川2-13B-4bits量化实测:OpenClaw长文本处理会丢信息吗?

百川2-13B-4bits量化实测&#xff1a;OpenClaw长文本处理会丢信息吗&#xff1f; 1. 测试背景与动机 最近在尝试用OpenClaw搭建个人自动化工作流时&#xff0c;遇到一个实际问题&#xff1a;当处理长文档&#xff08;比如几十页的PDF或网页文章&#xff09;时&#xff0c;AI助…...

python-flask-djangol框架的关爱空巢老人和孩子留守儿童管理系统的设计和实现

目录需求分析与规划技术选型核心模块设计数据安全与权限开发与测试计划社区与可持续性项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作需求分析与规划 明确系统核心功能模块&#xff1a;空巢老人健康监测、留守儿童学习与心理辅…...