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"`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}
}
- 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)
}
- 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,包含以下函数:将一个字符串中的所有单词进行反转,并输出反转后的结果。例如,输入字符串为"Hello World",输出结果为"olleH dlroW",并在主函数内测试该函数。 …...
变动的Python爬虫实现
在电商时代,了解商品价格的变动对于购物者和卖家来说都非常重要。本文将分享一种基于Python的实时监控电商平台商品价格变动的爬虫实现方法。通过本文的解决方案和代码示例,您将能够轻松监控商品价格,并及时做出决策。 一、了解需求和目标 在…...
mybatis-plus--配置-(sql)日志输出-自动填充-分页-多数据源-逻辑删除
写在前面: 本文主要介绍mybatis-plus的配置,以后在有的时候在补充。欢迎交流。 文章目录 日志输出自动填充分页全局字段配置多数据源 日志输出 调试的时候需要看执行的sql,这时候就很需要日志来记录查看了。 mybatis-plus的日志配置在yml…...
数据API服务管理功能:解放数据潜力,提升业务效率
数据API服务的重要性 在数字化时代,数据被认为是企业的重要资产。数据API服务的管理功能能够有效帮助企业实现数据的整合和利用。通过合理的数据API服务管理,企业可以更好地解放数据潜力,提升业务效率。 解放数据潜力 数据API服务管理功…...
云南森林火灾vr消防模拟安全演练系统训练消防员火灾和事故的适应和应对能力
据统计,每一场破坏性地震发生后,会引发次生的灾害,而火灾是其中之一。导致火灾的原因,推测是地震时使供电线路短路,引燃易燃物,火灾就随即发生。所以,在日常生活中,定期的消防演练还是非常必要的, VR消防,是VR公司深圳华锐视点利用VR虚拟现实技术,将VR和…...
(6)(6.2) 任务命令
文章目录 前言 6.2.1 概述 6.2.2 导航命令 6.2.3 条件命令 6.2.4 DO命令 前言 本文介绍了 Copter、Plane 和 Rover 切换到自动模式时支持的任务指令。 !Warning 这是一项正在进行中的工作,尚未经过全面审核。有关 Copter 的更佳列表,请…...
【consul】
consul 一、什么是服务注册与发现1.11.2 二、 什么是consul2.1定义2.2特性2.2.1服务注册与发现:2.2.2健康检查:2.2.3Key/Value存储: 三、consul部署-datacenter :指定数据中心名称,默认是dc1。consul :指定…...
Electron环境搭建
Electron是一个优秀的开源框架,用于构建跨平台的桌面应用程序。它基于Chromium和Node.js,使得开发者可以使用Web技术(HTML、CSS和JavaScript)来构建可在Windows、macOS和Linux等多个操作系统上运行的应用程序。本文将介绍如何搭建…...
MinIO线上扩容实战
硬件投入肯定是随着业务的增长而增长,这就要求中间件平台必须提供水平伸缩机制,MinIO对象存储服务也不例外,本文就详细介绍MinIO的扩容。 Minio支持通过增加新的Server Pool来扩容老的集群。每个Server Pool都是一个相对独立的故障域&#x…...
【微服务】微服务的概论
微服务:构建面向为了解决这个问题,微服务架构应运而生。本文将向您介绍微服务的概念、优势、实现原理以及应用场景,带您领略微服务在构建面向未来的高效应用中的魅力。 一、微服务的概念和优势 微服务是一种将应用拆分为一系列小型、独立服…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 : INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
