gorm:结合Model进行数据映射

golang工程组件篇对象关系映射gorm之Model的定又与tag的使用 该示例定义了一个名为User的结构体,并指定了它与gorm.Model之间的关系。Model定义与tag结合使用可以轻松地完成数据库表格和golang结构体之间的映射关系,并支持对数据库操作进行自动化迁移、增删改查等操作。在此,我们将探讨gorm中的Model定义和tag使用。在gorm中,可以使用tag来自定义表名、列名、约束等信息。在gorm中,Model定义表示数据库表和golang结构体之间的映射关系。在gorm中,Model定义与tag结合使用可以实现更灵活的ORM映射。 阅读详情

0、有这样一张表

CREATE TABLE `news_category` (
  `category_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `category_name` varchar(255) DEFAULT NULL,
  `category_remark` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='新闻分类表';

1、和模型映射

package model

type NewsCategoryModel struct {
	CategoryId int
	CategoryName string
	CategoryRemark string
}

3、测试几个功能
文档地址:http://gorm.io/docs/query.html

	db, err := gorm.Open("mysql", "root:root@/test?charset=utf8mb4&parseTime=True&loc=Local")
	defer db.Close()
	if err != nil {
		log.Fatal(err)
	}
	// 打开日志日志,查看执行的sql
	db.LogMode(true)

	model := &model.NewsCategoryModel{}
	db.Table("news_category").First(&model) //指定表名称,取第一条
	fmt.Println(model) //打印:&{1 财经 财经类节目说明}

成功取出表第一行数据

4、字段映射

CREATE TABLE `news_category` (
  `category_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `category_name` varchar(255) DEFAULT NULL,
  `category_remark` varchar(255) DEFAULT NULL,
  `type` tinyint(4) NOT NULL DEFAULT '1',
  PRIMARY KEY (`category_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COMMENT='新闻分类表';

表字段中有type

type NewsCategoryModel struct {
	CategoryId int
	CategoryName string
	CategoryRemark string
	CategoryType int //如何映射
}

模型中定义的是CategoryType,如何映射?

type NewsCategoryModel struct {
	CategoryId     int
	CategoryName   string
	CategoryRemark string
	CategoryType   int `gorm:"Column:type"`
}

详细用法参考文档:http://gorm.io/docs/models.html

5、根据主键ID来取

	//
	db.Table("news_category").First(&model, 2)

这样可以吗?不行。
它执行的sql是这样的:

 SELECT * FROM `news_category`  WHERE (`news_category`.`` = 2) LIMIT 1  

没有指定主键字段是哪个


type NewsCategoryModel struct {
	CategoryId     int	`gorm:"PRIMARY_KEY"`
	CategoryName   string
	CategoryRemark string
	CategoryType   int `gorm:"Column:type"`
}

这样就好了。

6、取出多条

	//定义切片
	var categorys []model.NewsCategoryModel

	//where条件查询
	db.Table("news_category").Find(&categorys)
	fmt.Println(categorys)	//打印:[{1 财经 财经类节目说明 1} {2 技术 技术类节目说明 2} {3 体育 体育类节目说明 3}]

相关推荐

戴维南和诺顿定理到底怎么选?一个实际维修案例讲透两种等效电路用法

本文通过工业电源模块维修案例,详细解析戴维南和诺顿定理在实际电路分析中的选择策略。针对电压敏感型故障、电流分配问题及功率传输异常,提供三大黄金法则,帮助工程师高效选择等效电路方法,提升故障排查效率。特别强调诺顿定理在电流分析中的优势。

weixin_31854867的博客 357

【gorm】4. gorm中关系映射

Id int Pic string CPic string Phone string User User //关联关系 UserID int //关联User的ID作为外键 书写方式为[模型名称+ID] }ForeignKey为当前表中与User关联的外键名称 AssociationForeignKey为关联的表中的关联字段名。

weixin_48294669的博客 1240

Doris副本修复实战:从状态机到手动修复的完整指南

在分布式数据库系统中,多副本机制是实现高可用与数据一致性的核心技术。其原理是通过在不同节点存储数据的多个拷贝,确保部分节点故障时服务仍可继续。这项技术的核心价值在于保障数据可靠性,并支撑在线分析处理(OLAP)等对数据一致性要求高的应用场景。当副本出现损坏、丢失或版本不一致时,系统通常依赖自动修复机制,但在元数据损坏、多副本同时故障等复杂场景下,自动修复可能失效,需要深入理解副本状态机并借助手动工具介入。本文将聚焦Doris数据库,解析Tablet副本状态流转(如BAD、VERSION_ERROR),并详细

weixin_32288959的博客 454

Gorm 基础:表映射

这篇文章将以创建事件时间记录功能为示例,介绍如何使用 Gorm 完成数据库表的基本映射、简单的创建表数据操作和注意事项。

CodeSingerAlex的博客 1404

Qt Coordinate System

Qt 坐标系统Qt 坐标系统 数学基础 Qt坐标系统 视口 平移变换 缩放变换 setWindow 旋转 总结数学基础 矩阵与线性变换坐标系变换Qt坐标系统 视口和OpenGL一样,视口确定了画面在窗口(QWidget)中显示的区域,Qt的绘图坐标会完全映射到视口(View port)上,就像图示一样。默认情况下,窗口和视口是重合的,视口的大小覆盖了整个窗口。和OpenGL一样,Qt的QPa

unclerunning的博客 1150

K210开发板学习笔记(三)——STM32+K210+SD卡实现人脸识别(完整K210代码)

更新日记:2022年4月26日 更新了串口通信部分的内容,本文写的略为粗糙,恐有不当之处,希望大家不吝赐教。 人脸识别 一、MaixPy IDE开发 参考博主晨少hc的博文(https://blog.youkuaiyun.com/HuangChen666/article/details/113995079)来实现人脸识别功能,我用的硬件是亚博智能的K210开发板,在配置工程中有几步和这个博主的不一样,需要注意。 所需要的文件有:模型文件),脚本文件,ide需要的bin文件...

Embedded learner的博客 4万+

GORM 个别字段无法映射成功原因

gorm结构体个别字段无法映射成功分析

tingfengyinyue的博客 1488

美亚杯取证比赛必备:Veracrypt挂载+检材解压保姆级教程(附常见错误排查)

本文提供美亚杯数字取证竞赛的Veracrypt挂载与检材解压保姆级教程。详细解析从分卷压缩包解压(密码格式为MeiyaCup+年份)到使用Veracrypt正确挂载加密容器的全流程,并附有常见错误排查与高级应急方案,帮助选手高效突破技术门槛,顺利进入取证分析阶段。

alice7model的博客 1028

gorm 中 MySQL 错误码映射与主键冲突错误处理

在使用 gorm 处理数据库操作时,尤其是针对 MySQL,有时我们会遇到 golang 标准库`errors.Is`函数无法直接识别特定的 gorm 错误类型的情况,如主键冲突错误。尽管 gorm 提供了`gorm.ErrDuplicatedKey`来表示此类错误,但在原始错误返回中并不能直接通过`errors.Is(err, gorm.ErrDuplicatedKey)`来进行判断。本文深入探究 gorm.io/driver/mysql 包中的错误转换机制...

了迹奇有没 1584

FPGA以太网接口设计避坑指南:GMII与RGMII时序转换的三种实现方案对比

本文深入解析FPGA以太网接口设计中GMII与RGMII时序转换的三种实现方案,包括Xilinx官方IP核、手工原语逻辑和开源方案gmii_to_rgmii。通过对比分析各方案的优缺点和适用场景,为工程师提供技术选型指南,帮助避免常见设计陷阱,提升高速网络设备开发的效率和可靠性。

weixin_42570484的博客 378

官网下载stm32Fx固件库(标准外设)详细步骤

官网下载stm32f407固件库(标准外设)详细步骤

qq_52632983的博客 1万+

【Gorm】模型定义

模型定义映射机制:GORM 将 Go 语言中的结构体(struct)映射为数据库中的表。定义模型就是编写对应的结构体。字段类型:模型字段可以使用基本类型(如uintstringuint8)、指针(如*string*time.Time)以及特殊类型(如)来处理可空值。自动管理的时间戳:如果定义了CreatedAt和UpdatedAt字段,GORM 会在创建和更新记录时自动填充当前时间。非导出字段:结构体中首字母小写的字段不会映射到数据库中。内置模型(gorm.Model)

Pyroyster的博客 2283

杰理SDK入门教程(五):按键使用配置

摘要 杰理SDK提供IO按键和AD按键两种方案。IO按键通过GPIO电平检测实现,配置时需要设置板级宏定义和硬件连接,默认使用PB1引脚。AD按键基于ADC电压采样,通过电阻分压区分按键,需配置功能使能、硬件通道和键值适配。按键功能通过修改SDK中的key_table文件实现。两种方案适用于不同硬件场景,开发者可根据需求选择。

qq_42014563的博客 774

GORM模型(Model)定义

在使用ORM工具时,通常我们需要在代码中定义模型(Models)与数据库中的数据表进行映射,在GORM中模型(Models)通常是正常定义的结构体、基本的go类型或它们的指针。 同时也支持sql.Scanner及driver.Valuer接口(interfaces)。 GORM 倾向于约定,而不是配置。默认情况下,GORM 使用ID作为主键,使用结构体名的蛇形复数作为表名,字段名的蛇形作为列名,并使用CreatedAt、UpdatedAt字段追踪创建、更新时间 遵循 GORM 已有的约定...

jiangshanghe的博客 5602

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Gorm Model FindFirstWhere等查询函数的区别

gorm是一款优秀的国产golang orm关系型数据库框架,在国内外使用比较广泛。它的链式调用还算是一种符合人类思维的风格。 不过在使用过程中也遇到一些困扰,比如:Model, Find, First, Where这些函数该什么时候使用,有时候会有边界不清楚,使用混乱的情况。 以下代码示例使用v2版本,v1和v2大体上相同,有些细微的不同 Where和Find search := User{UserName:"月盾"} db.Find(&user, search) // SELECT * F

月盾的专栏 2199

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

G0第23章:GORM基本示例、GORM Model定义、主键、表名、列名的约定

在使用GORM工具时,通常我们需要再代码中定义模型(model)与数据库中的数据表进行映射,在GORM中模型(Models)通常是正常定义的结构体、基本的go类型或他们的指针。同时也支持 sql.Scanner 及 driver.Valuer 接口。unique_index"` Role string `gorm:"size:255"` // 设置字段大小为255 MemberNumber * string `gorm:"unique;

tianyi520jx的博客 3631

GORM Model定义

GORM Model定义 在使用ORM工具时,通常我们需要在代码中定义模型(Models)与数据库中的数据表进行映射,在GORM中模型(Models)通常是正常定义的结构体、基本的go类型或它们的指针。 同时也支持sql.Scanner及driver.Valuer接口(interfaces)。 gorm.Model 为了方便模型定义,GORM内置了一个gorm.Model结构体。gorm.Model是一个包含了ID, CreatedAt, UpdatedAt, DeletedAt四个字段的Golang结构体

小熊的博客 849

GORM 中 Model 和 Table 的区别及使用场景

GORM 中 Model 和 Table 的区别及使用场景

一起coding,一起嗨。 1373

Golang GORM 模型定义 结构标签、gorm.Model

模型一般都是普通的 Golang 的结构体,Go的基本数据类型,或者指针。模型是标准的struct,由Go的基本数据类型、实现了Scanner和Valuer接口的自定义类型及其指针或别名组成(创建一个结构体可以将其变为一张表)定义一张表:常识:小写属性是不会生成字段的id这里其实就是一个主键,主键就是可以自增并且不能重复。

小楼一夜听春雨,深巷明朝卖杏花 1414

【GORM框架】模型定义超详解,确定不来看看?

在使用ORM工具时,需要在代码中定义模型(Model)将其和数据库中的数据表(table)进行映射。在GORM中,模型可以是以下几种结构体基本go类型go类型变量指针实现或者的接口(interface)

Yaoyao2024的博客 1536

Copier与gorm:如何高效复制数据库模型数据

在日常开发中,你是否还在手动编写大量重复代码来复制数据库模型数据?是否因为结构体字段不匹配而频繁调试?本文将介绍如何使用Copier和GORM(对象关系映射,Object Relational Mapping)高效复制数据库模型数据,解决这些痛点。读完本文,你将掌握使用Copier简化GORM模型数据复制的方法,提升开发效率。 ## Copier简介 Copier是一个Go语言库,用于在结构体...

gitblog_00343的博客 951

深入解析 GORM 的 Model 方法:隐式选择与模型绑定的艺术

深入解析 GORM 的 Model 方法:隐式选择与模型绑定的艺术

一起coding,一起嗨。 1034

探索Gorm - Golang流行的数据库ORM框架

Gorm是一款用于Golang的ORM框架,它提供了丰富的功能。作者:鼠鼠我捏,要死了捏

qq_35716689的博客 33万+

gorm 操作mysql

目录 一、gorm介绍 二、gorm安装 三、gorm模型定义 1、ORM介绍 2、gorm模型定义 3、gorm模型标签 4、定义表名 5、gorm.Model 6、自动更新时间 四、gorm连接数据库 1、配置DSN (Data Source Name) 2、使用gorm.Open连接数据库 3、gorm调试模式 4、gorm连接池 一、gorm介绍 GORM是Golang目前比较热门的数据库ORM操作库,对开发者也比较友好,使用非常方便简单,使用上主要就是把

大道至简,持之以恒! 8812

GORM的使用

GORM的使用

weixin_68658847的博客 1879

GORM连接MySQL

GORM连接MySQL 文章目录GORM连接MySQL基本介绍安装连接MySQL 基本介绍 gorm是一个使用Go语言编写的ORM框架。它文档齐全,对开发者友好,支持主流数据库。 详细介绍及使用请移步官方中文文档: https://gorm.io/zh_CN/docs/ 安装 go get -u github.com/jinzhu/gorm 连接MySQL import ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialec

qq_49723651的博客 3364

GORM教程

无

weixin_44961320的博客 1886
上一篇: Gorm入手、执行原始SQL
下一篇: gorm:新增数据、封装DB初步、结合Gin实现查询API
学习笔记666
博客等级 码龄12年 1047粉丝 1369原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值