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

GORM---创建

目录

  • 模型定义
  • 使用Create创建记录
  • 一次性创建多条数据
  • 批量插入数据时开启事务
  • 默认值问题

模型定义

定义一个PersonInfo结构体。

type PersonInfo struct {Id       uint64 `gorm:"column:id;primary_key;NOT NULL" json:"id"`UserName string `gorm:"column:username;unique;NOT NULL" json:"username"`Password string `gorm:"column:password" json:"password"`Age      int    `gorm:"column:age" json:"age"`
}

使用Create创建记录

Create方法用于创建一条新的数据记录,并将其保存到数据库中。使用该方法时,需要传入一个指针,表示要创建的数据记录。

p1 := connect.PersonInfo{Id:       1,UserName: "abc",Password: "12345",Age:      19,}connect.DB.Create(&p1)

运行完成后,查询结果如下:

image-20230604085025895

一次性创建多条数据

第一种方法:使用 Create() 创建多项记录:

	p := []*connect.PersonInfo{{Id: 2, UserName: "def", Password: "56789", Age: 20},{Id: 3, UserName: "xyz", Password: "09876", Age: 22},}connect.DB.Create(&p)

运行完成后,查询结果如下:

image-20230604110931689

第二种方法:使用 CreateInBatches()方法。该方法可以一次性将多条数据记录批量插入到数据库中,从而提高插入数据的效率。CreateInBatches 方法的用法与 Create 方法基本相同,只是需要传入一个额外的参数,表示每批次插入的数据记录数量。使用CreateInBatches方法的好处就是CreateInBatches方法能够保证原子性,如果其中一条数据插入失败,则整个插入操作都会进行回滚。

p := []connect.PersonInfo{{Id: 4, UserName: "drg", Password: "5622", Age: 25},{Id: 5, UserName: "tes", Password: "0955", Age: 26},}connect.DB.CreateInBatches(p, 2)

运行完成后,查询结果如下:

image-20230604111734531

批量插入数据时开启事务

p := []connect.PersonInfo{{Id: 6, UserName: "edg", Password: "6722", Age: 24},{Id: 7, UserName: "dyg", Password: "0395", Age: 23},}tx := connect.DB.Begin() //开启事务for _, value := range p {tx.Create(&value)}tx.Commit() //提交事务

运行完成后,查询结果如下:

image-20230604112557961

上面的示例代码中,首先定义了一个名为p的结构体切片,其中包含2条数据记录。然后,调用 Begin 方法开启一个事务,循环遍历 p 切片,调用 Create 方法插入每条数据记录,最后调用 Commit 方法提交事务。与 CreateInBatches 方法类似,如果其中任何一个数据记录插入失败,整个事务都会回滚。

默认值问题

定义如下模型:

type User struct {Id       uint64UserName stringPassWord string `gorm:"default:'000000'"`Age      int    `gorm:"default:18"`
}

如果没有指定password,password就为000000;如果没有指定age,age就为18。

u := connect.User{Id:       1,UserName: "aaa",}connect.DB.Create(&u)
image-20230604115407950

注意: 通过tag定义字段的默认值,在创建记录时候生成的 SQL 语句会排除没有值或值为零值的字段。 在将记录插入到数据库后,Gorm会从数据库加载那些字段的默认值。举个例子:

u := connect.User{Id:       2,UserName: "bbb",PassWord: "",Age:      0,}connect.DB.Create(&u)

运行完成后,查询结果如下:

image-20230604115743351

可以看到,上面代码的执行结果并不是password为空值,age为0。而是password为000000,age为18。所以,当使用了tag的默认值功能的时候,其字段的零值, 比如0, “”,false或者其它零值,都不会保存到数据库内,而是使用他们的默认值。 如果想避免这种情况,可以考虑使用指针或实现 Scanner/Valuer接口,

1.使用指针方式实现零值存入数据库

使用指针重新定义模型:(将原来的string类型和int类型改为 *string 和 *int 类型。)

type User struct {Id       uint64UserName stringPassWord *string `gorm:"default:'000000'"`Age      *int    `gorm:"default:18"`
}

使用new函数进行赋值:

u := connect.User{Id:       2,UserName: "bbb",PassWord: new(string),Age:      new(int),}connect.DB.Create(&u)

运行完成后,查询结果如下:

image-20230604120802961

这样各种类型的零值或空值字段就能插入数据库了。

2.使用Scanner/Valuer接口方式实现零值存入数据库

模型定义如下:(将原来的string类型和int类型改为 sql.NullString 和 sql.NullInt64 类型。)

type User struct {Id       uint64UserName stringPassWord sql.NullString `gorm:"default:'000000'"` // sql.NullString 实现了Scanner/Valuer接口Age      sql.NullInt64  `gorm:"default:18"`       // sql.NullInt64 实现了Scanner/Valuer接口
}

赋值如下:

u := connect.User{Id:       3,UserName: "bing",PassWord: sql.NullString{String: "", Valid: true},Age:      sql.NullInt64{Int64: 0, Valid: true},}connect.DB.Create(&u)

运行完成后,查询结果如下:

image-20230604143256011

相关文章:

GORM---创建

目录 模型定义使用Create创建记录一次性创建多条数据批量插入数据时开启事务默认值问题 模型定义 定义一个PersonInfo结构体。 type PersonInfo struct {Id uint64 gorm:"column:id;primary_key;NOT NULL" json:"id"UserName string gorm:"co…...

高级查询 — 分组汇总

关于分组汇总 1.概述 将查询结果按某一列或者多列的值分组。 group by子句 分组后聚合函数将作用于每一个组,即每一组都有一个函数值。 语法 select 字段列表 from 表名 where 筛选条件 group by 分组的字段;select 字段列表 from 表名 group by 分组的字段 hav…...

【多线程】阻塞队列

1. 认识阻塞队列和消息队列 阻塞队列也是一个队列,也是一个特殊的队列,也遵守先进先出的原则,但是带有特殊的功能。 如果阻塞队列为空,执行出队列操作,就会阻塞等待,阻塞到另一个线程往阻塞队列中添加元素(…...

python2升级python3

查看当前版本 [roottest-01 node-v18.16.0]# python -V Python 2.7.5 安装依赖 [roottest-01 node-v18.16.0]# yum install -y gcc gcc-c zlib zlib-devel readline-devel 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base…...

Apache Hudi初探(八)(与spark的结合)--非bulk_insert模式

背景 之前讨论的都是’hoodie.datasource.write.operation’:bulk_insert’的前提下,在这种模式下,是没有json文件的已形成如下的文件: /dt1/.hoodie_partition_metadata /dt1/2ffe3579-6ddb-4c5f-bf03-5c1b5dfce0a0-0_0-41263-0_202305282…...

Java之旅(九)

Java 循环语句 Java 中的循环语句包括 for、while 和 do-while,它们都可以用于实现循环结构。 for 语句用于循环执行一段代码块,直到给定的条件表达式的布尔值为 false。 for 语句的一般格式如下: for (initialization; condition; update…...

6年测试经验之谈,为什么要做自动化测试?

一、自动化测试 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。 个人认为,只要能服务于测试工作,能够帮助我们提升工作效率的,不管是所谓的自动化工具,还是简单的SQL 脚本、批处理脚本,还是自己编写…...

二分法的边界条件 2517. 礼盒的最大甜蜜度

2517. 礼盒的最大甜蜜度 给你一个正整数数组 price ,其中 price[i] 表示第 i 类糖果的价格,另给你一个正整数 k 。 商店组合 k 类 不同 糖果打包成礼盒出售。礼盒的 甜蜜度 是礼盒中任意两种糖果 价格 绝对差的最小值。 返回礼盒的 最大 甜蜜度。 记录一…...

java设计模式(十六)命令模式

目录 定义模式结构角色职责代码实现适用场景优缺点 定义 命令模式(Command Pattern) 又叫动作模式或事务模式。指的是将一个请求封装成一个对象,使发出请求的责任和执行请求的责任分割开,然后可以使用不同的请求把客户端参数化&a…...

[运维] iptables限制指定ip访问指定端口和只允许指定ip访问指定端口

iptables限制指定ip访问指定端口 要使用iptables限制特定IP地址访问特定端口&#xff0c;您可以使用以下命令&#xff1a; iptables -A INPUT -p tcp -s <IP地址> --dport <端口号> -j DROP请将 <IP地址> 替换为要限制的IP地址&#xff0c;将 <端口号&g…...

JS学习笔记(3. 流程控制)

1. 分歧 1.1 if条件 if (条件) {...} // 为真则执行&#xff0c;单条语句可省略大括号 if (条件) {...} else {...}// 为真则执行if&#xff0c;否则执行else if (条件1) {...} else if (条件2) {...} else {...} // 条件1为真则&#xff0c;条件2为真则&#xff0c;否则执…...

遥感云大数据在灾害、水体与湿地领域典型案例及GPT模型教程

详情点击链接&#xff1a;遥感云大数据在灾害、水体与湿地领域典型案例及GPT模型教程 一&#xff1a;平台及基础开发平台 GEE平台及典型应用案例&#xff1b; GEE开发环境及常用数据资源&#xff1b; ChatGPT、文心一言等GPT模型 JavaScript基础&#xff1b; GEE遥感云重…...

什么是文件描述符以及重定向的本质和软硬链接(Linux)

目录 1 什么是文件&#xff1f;什么是文件操作&#xff1f;认识系统接口open 什么是文件描述符认识Linux底层进程如何打开的文件映射关系重定向的本质理解软硬链接扩展问题 1 什么是文件&#xff1f;什么是文件操作&#xff1f; 文件 文件内容 文件属性&#xff08;文件属性…...

LVM逻辑卷元数据丢失恢复案例 —— 筑梦之路

Lvm常见的故障主要是pv出现异常&#xff0c;有以下几种情况 一个是pv所在的磁盘发生了lvm的元数据损坏一个是系统无法识别到pv所在的磁盘一个是系统异常&#xff0c;断电等导致重启后盘符发生变化&#xff0c;也就是系统识别的磁盘uuid发生变化&#xff0c;但是wwid还是可以对应…...

Java技术规范概览

Java技术规范 目录概述需求&#xff1a; 设计思路实现思路分析1.Java JSR的部分2.JSR-000373.JSR-0000394.JSR-000337 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a bet…...

【OpenMMLab AI实战营第二期】二十分钟入门OpenMMLab笔记

OpenMMlab 主页&#xff1a;openmmlab.com 开源地址&#xff1a;https://github.com/open-mmlab 学习视频地址&#xff1a;https://www.bilibili.com/video/BV1js4y1i72P/ 概述 开源成为人工智能行业发展引擎 时间轴 theano&#xff1a;2007 Caffe&#xff1a;2013 Ten…...

docker-compose单机容器集群编排

docker-compose dockerfile模板文件可以定义一个独立的应用容器&#xff0c;如果需要多个容器就需要服务编排。服务编排有很多技术方案 docker-compose开源的项目实现对容器集群的快速编排 docker-compose将所管理的容器分为三层&#xff0c;分别为工程&#xff0c;服务&#…...

CentOS7 安装Gitlab

1、安装依赖 sudo yum install -y curl openssh-server ca-certificates tzdata perl libsemanage-devel 2、安装邮件服务工具 sudo yum install -y postfix 3、配置GitLab 软件源镜像 curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash …...

Mysql InnoDB的Buffer Pool

Buffer Pool 在MySQL服务器启动的时候就向操作系统申请了⼀⽚连续的内存&#xff0c;他们给这⽚内存起了个名&#xff0c;叫做Buffer Pool&#xff08;中⽂名 是缓冲池&#xff09;。 默认情况下Buffer Pool只有128M⼤⼩&#xff0c;最⼩值为5M&#xff0c;通过修改配置文件设…...

SMTP简单邮件传输协议(C/C++ 发送电子邮件)

SMTP是用于通过Internet发送电子邮件的协议。电子邮件客户端&#xff08;如Microsoft Outlook或macOS Mail应用程序&#xff09;使用SMTP连接到邮件服务器并发送电子邮件。邮件服务器还使用SMTP将邮件从一个邮件服务器交换到另一个。它不用于从服务器下载电子邮件&#xff1b;相…...

Cinema 4D 2026液体模拟实战:如何用新功能打造逼真水流效果(附参数设置)

Cinema 4D 2026液体模拟实战&#xff1a;如何用新功能打造逼真水流效果&#xff08;附参数设置&#xff09; 在三维动画和特效设计领域&#xff0c;液体模拟一直是技术难度最高、计算资源消耗最大的环节之一。Cinema 4D 2026针对这一核心功能进行了重大升级&#xff0c;特别是改…...

保姆级教程:用Clawdbot将私有化Qwen3-VL接入飞书,打造企业智能助手

保姆级教程&#xff1a;用Clawdbot将私有化Qwen3-VL接入飞书&#xff0c;打造企业智能助手 1. 准备工作与环境确认 1.1 硬件环境检查 在开始前&#xff0c;请确保您的星图云实例满足以下最低配置要求&#xff1a; 组件最低要求推荐配置GPU显存24GB48GBCPU核心8核20核系统内…...

YOLOv12与数据库集成:使用MySQL存储检测结果与元数据

YOLOv12与数据库集成&#xff1a;使用MySQL存储检测结果与元数据 1. 引言 想象一下这个场景&#xff1a;你部署了一个YOLOv12模型&#xff0c;用来实时监控仓库的货物进出。摄像头24小时不间断工作&#xff0c;模型每秒都能识别出几十个包裹、叉车和人员。识别结果很准&#…...

lite-avatar形象库保姆级教学:从CSDN控制台创建GPU实例到数字人上线全过程

lite-avatar形象库保姆级教学&#xff1a;从CSDN控制台创建GPU实例到数字人上线全过程 桦漫AIGC集成开发 | 微信: henryhan1117 1. 开篇&#xff1a;为什么选择lite-avatar形象库&#xff1f; 如果你正在寻找高质量的数字人形象&#xff0c;但又不想从零开始训练模型&#xff…...

基于STM32与ADS1258的高精度电流数据采集方案实现

1. 高精度电流采集系统设计思路 电流测量在工业自动化、新能源和车载电子等领域都是基础但关键的环节。传统方案使用普通ADC配合分压电阻&#xff0c;精度往往只能达到1%左右&#xff0c;而采用ADS1258这类24位Σ-Δ ADC&#xff0c;配合STM32主控&#xff0c;可以实现0.01%级的…...

Aspen Plus模拟电解质水脱酸:一场化工模拟的奇妙之旅

Aspen Plus模拟电解质水脱酸Aspen 化工过程模拟→电解质水脱酸模拟在温度为 8C、压力为 1 atm、质量流量为 5000 kg/h 的条件下&#xff0c;含有 0.20 wt% CO2、0.15 wt% H2S 和 0.1 wt% NH3 的酸性水流将通过 1.1 atm、质量流量为 1500 kg/h 的干蒸汽进行处理。在化工领域&…...

SiameseUIE保姆级教程:3步部署nlp_structbert_siamese-uie_chinese-base

SiameseUIE保姆级教程&#xff1a;3步部署nlp_structbert_siamese-uie_chinese-base 信息抽取不再需要标注数据&#xff0c;一个模型搞定NER、关系抽取、事件抽取、情感分析四大任务 1. 什么是SiameseUIE&#xff1f;为什么值得一试 如果你正在处理中文文本信息抽取任务&#…...

OFA图像语义蕴含模型效果展示:漫画分镜图+剧情假设的叙事逻辑连贯性验证

OFA图像语义蕴含模型效果展示&#xff1a;漫画分镜图剧情假设的叙事逻辑连贯性验证 1. 引言&#xff1a;当漫画遇上AI逻辑验证 你有没有过这样的经历&#xff1f;看漫画时突然发现前后剧情对不上&#xff0c;或者某个分镜的画面和对话明显矛盾&#xff1f;这种叙事逻辑的不连…...

实战指南:基于快马生成的原型开发智能设备手机管理后台

实战指南&#xff1a;基于快马生成的原型开发智能设备手机管理后台 最近在做一个智能家居设备的项目&#xff0c;需要给用户提供一个手机端的配置管理界面。想到很多家用路由器都是用192.168.1.1这样的地址进行管理&#xff0c;就决定用这个作为切入点&#xff0c;开发一个类似…...

5分钟掌握Fara-7B:微软开源的高效电脑自动操作AI智能代理

5分钟掌握Fara-7B&#xff1a;微软开源的高效电脑自动操作AI智能代理 【免费下载链接】fara Fara-7B: An Efficient Agentic Model for Computer Use 项目地址: https://gitcode.com/gh_mirrors/fara/fara 想要让电脑自动完成重复性任务吗&#xff1f;厌倦了手动操作网页…...