gorm简介

【1】ORM:
即Object-Relational Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它们就可以了。

【2】GORM
gorm是go语言的一个orm框架,Golang写的,开发人员友好的ORM库。

【3】中文文档:
https://gorm.io/zh_CN/docs/

【4】安装GORM:
录入安装GORM的命令

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql


案列:
【1】创建一个数据库:testgorm

package mainimport ("fmt""gorm.io/driver/mysql" //引入mysql驱动"gorm.io/gorm"
)func main() {//连接数据库://参数:指的是数据库的设置信息:用户名:密码@tcp(ip:port)/数据库名字?charset=utf8&parseTime=True&loc=Local//charset=utf8设置字符集//parseTime=True为了处理time.Time//loc=Local时区设置,与本地时区保持一致dsn := "root:root@tcp(127.0.0.1:3306)/testgorm?charset=utf8&parseTime=True&loc=Local"db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {panic(err) //如果出错,后续代码没有必要执行,想让程序中断,panic来执行即可}//创建表方式一:通常情况下,数据库中新建的表的名字是结构体名字的复数形式,例如结构体User,表名usersif err := db.AutoMigrate(&User{}); err != nil {panic(err)}//创建表方式二:Table方法可以指定你要创建的数据库的表名if err := db.Table("user").AutoMigrate(&User{}); err != nil {panic(err)}//删除表if !db.Migrator().HasTable(&User{}) {fmt.Println("table does not exist")} else {if err := db.Migrator().DropTable(&User{}); err != nil {panic(err)}}}// 定义结构体
type User struct {Age  intName string
}

【2】表名自定义规则

//【1】模型名称和表名的映射规则:
//1、如果模型名没有驼峰命名,那么表名就是:模型名小写+复数形式:如模型名User---》表名users
//2、如果模型名有驼峰命名,那么表名就是:大写变小写并在前面加下划线,最后加复数形式:如模型名UserInfo---》表名user_infos
//3、如果模型名有连续的大写字母,那么表名就是:连续的大写字母变小写,驼峰前加下划线,字母变小写,最后加复数形式:如模型名:DBUserInfo---》表名db_user_infos
type User struct {Age  intName string
}type MyUser struct {Age  intName string
}//自定义表名
func (MyUser) TableName() string {return "test_my_user"
}

【3】gorm.Model匿名字段

只需要再自己的模型中指定gorm.Model匿名字段,即可在数据库表中包含四个字段:ID,CreatedAt,UpdatedAt,DeletedAt
ID:主键自增长
CreatedAt:用于存储记录的创建时间
UpdatedAt:用于存储记录的修改时间
DeletedAt:用于存储记录的删除时间
代码:

type MyUser2 struct {gorm.ModelAge  intName string
}

【4】通过结构体标签gorm来实现表的约束 

(1)-: 忽略,不映射这个字段 eg:gorm:"”,适合:一些冗余字段,不想在数据库中体现,只想在结构体中体现

(2)primary key:主键eg:gorm:"primary key
(3)AUTO INCREMENT:自增 eg:`gorm:"AUTO INCREMENT"

(4)not null:不为空,默认为空 eg:gorm:"not null"
(5)index:索引,eg:gorm:"index"
创建索引并命名:eg:gorm:"index:idx name_code"

(6)unique index:唯一索引 eg:`gorm:"unique index"唯一性索引unique index和一般索引normal index最大的差异就是在索引列上增加了一层唯一约束。添加唯一性索引的数据列可以为空,但是只要存在数据值,就必须是唯一的。

(7)unique:唯-eg:gorm:"unique"

(8)column:指定列名eg:`gorm:"column:user name

(9)size:字符串长度,默认为255 eg:gorm:"size:10"`
(10)default`default:'男”默认值
(11)type:设置sql类型 eg:gorm:"type:int(2)"
PS:多个属性值之间用分号分隔

代码:

type Student struct {StuID   int    `gorm:"primary_key;AUTO_INCREMENT"`Name    string `gorm:"not null"`Age     int    `gorm:"unique_index"` //`gorm:"index:name_index"`Email   string `gorm:"unique"`Sex     string `gorm:"column:gender;size:10"`Desc    string `gorm:"-"`Classno string `gorm:"type:int"`
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/30798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux之gzip压缩和解压缩

Linux之gzip压缩和解压缩 gzip命令是压缩和解压缩命令,用于操作".gz"格式的的文件。gzip对文本文件的压缩率有60%~70%。 命令格式 注意,选项的顺序不可变tar -zcvf 打包压缩文件名.tar.gz 被压缩的文件/目录 --压缩文件 tar -zxvf 打包文…

SpringBoot的冬奥会科普平台 LW +PPT+源码

3 平台分析 3.1 平台可行性分析 3.1.1 经济可行性 由于本平台是作为毕业设计平台,且平台本身存在一些技术层面的缺陷,并不能直接用于商业用途,只想要通过该平台的开发提高自身学术水平,不需要特定服务器等额外花费。所有创造及工…

【每日刷题】Day70

【每日刷题】Day70 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 922. 按奇偶排序数组 II - 力扣(LeetCode) 2. 905. 按奇偶排序数组 - 力扣&…

CSS--超出就显示滚动条并设置滚动条的样式

原文网址:CSS--超出就显示滚动条并设置滚动条的样式_IT利刃出鞘的博客-CSDN博客 简介 本文介绍HTML如何超出就显示滚动条并设置滚动条的样式。 超出就显示滚动条 方法如下: 第一步:设置父容器的高度(height或者max-height&am…

Bigtable的数据结构

Bigtable的数据结构 1. 表(Table) 基本单位:Bigtable存储数据的基本单位是表,一个表由多行组成。无限制:表可以非常大,理论上没有大小限制。 2. 行(Row) 行键:每一行…

GeoServer安装启动

GeoServer 使用 servlet 容器(例如Apache Tomcat)打包为独立的 Java web 应用程序。以下说明专门针对 Tomcat。它可能不适用于其他容器应用程序。 在 Tomcat 上安装 导航到GeoServer 下载页面。从“已存档”中,选择最新的 2.18.x 版本的 GeoS…

Python12 列表推导式

1.什么是列表推导式 Python的列表推导式(list comprehension)是一种简洁的构建列表(list)的方法,它可以从一个现有的列表中根据某种指定的规则快速创建一个新列表。这种方法不仅代码更加简洁,执行效率也很…

iOS 17.6养老版发布,旧机必升?

iOS 17.6 的第一个开发者测试版已发布,另外还发布了macOS 14.6、watchOS 10.6、iPadOS 17.6 等。 苹果iOS系统更新一直是科技爱好者和用户关注的焦点,尤其是在iOS18的测试阶段,其吸引力尤为显著。尽管苹果同时推送了iOS17.6 Beta1&#xff0c…

linux 如何判断磁盘是HDD还是SSD

本文主要是判断磁盘是 HDD 还是不上 HDD,只用于直通盘的判断,raid盘不在内 方法一、 使用lsblk 命令判断 # 仅查看物理盘的名称、空间大小、SSD(0)? HDD(1)?, 设备供应商以及状态。 [integraTorsctyunos ~]$ lsblk -d -o NAME,SIZE,ROTA,VENDOR,STATE…

kimi+的+能为论文写作+出什么?我帮你试过了!

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 Kimi是月之暗面科技有限公司开发的个性化智能助手功能。相比kimi,Kimi能够提供个性化定制服务,根据用户特定需求提供更专业深入的辅助,实现一对一的智…

多线程(总结黑马程序员)

一、什么是线程? 是一个程序内部的一条执行流程 多线程是什么? 多条线程由CPU负责调度执行 多线程的创建方式一:继承Thread类 //1.继承Thread类 public class MyThread extends Thread {//2.必须重写run方法Overridepublic void run() {…

人工智能之AI作画

AI作画(AI-generated Art)是指利用人工智能技术来创作艺术作品的过程。随着深度学习和生成模型的发展,AI作画已经在艺术界和技术界引起了广泛关注和研究。从专业角度来看,AI作画涉及多个技术领域,包括计算机视觉、机器…

【人机交互 复习】第9章 以用户为中心的设计

一、以用户为中心的设计(UCD) 1.思想: (1)好的设计结果使客户感到满意。 (2)设计过程是设计人员与客户之间的协作过程。设计要进化并适应客户不断变化的考虑,作为一种副产品&#…

Clickhouse备份恢复_clickhouse-client方式backup命令之备份目录的设置

https://clickhouse.com/docs/en/operations/backup#command-summary 想要backup database dbname to Disk(‘diskname’,‘backupfilename.zip’)成功的话&#xff0c;需要符合3点 1、diskname需要在/etc/clickhouse-server/config.d/backup_disk.xml在<storage_configura…

【数据结构】【版本1.3】【线性时代】——栈

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、栈的概念二、栈的模拟实现2.1 定义2.2 初始化2.3 销毁2.4 压栈2.5 判空2.6 出栈2.7 获取栈顶元素2.8…

RAG优化技巧|7大挑战与解決方式|提高你的LLM能力

在当今快速发展的人工智能领域&#xff0c;大型语言模型&#xff08;LLM&#xff09;已经成为无处不在的技术&#xff0c;它们不仅改变了我们与机器交流的方式&#xff0c;还在各行各业中发挥着革命性的影响。 然而&#xff0c;尽管LLM RAG的能力已经让人惊叹&#xff0c;但我…

浅谈配置元件之JDBC连接配置

浅谈配置元件之JDBC连接配置 通过使用“JDBC连接配置”配置元件&#xff08;JDBC Connection Configuration&#xff09;&#xff0c;您可以轻松地在JMeter测试计划中集成数据库交互能力。本指南将详细介绍如何设置和使用此配置元件来连接数据库并执行SQL查询。 1. 准备工作 …

深度学习500问——Chapter12:网络搭建及训练(1)

文章目录 12.1 TensorFlow 12.1.1 TensorFlow 是什么 12.1.2 TensorFlow的设计理念是什么 12.1.3 TensorFlow特点有哪些 12.1.4 TensorFlow的系统架构是怎样的 12.1.5 TensorFlow编程模型是怎样的 12.1.6 如何基于TensorFlow搭建VGG16 12.1 TensorFlow 12.1.1 TensorFlow 是什…

微服务架构:解构现代应用程序的未来

目录 前言1. 微服务架构的基本概念1.1 什么是微服务架构1.2 微服务与单体架构的对比 2. 微服务架构的优势2.1 灵活性与可扩展性2.2 持续交付与部署2.3 技术多样性2.4 故障隔离 3. 微服务架构的挑战3.1 服务间通信和数据一致性3.2 运维复杂度3.3 安全性3.4 开发团队的协作 4. 微…

内核学习——1、list_head

双向循环链表&#xff1a;list_head 头节点head是不使用的&#xff1a; struct list_head { struct list_head *next, *prev; }; 结构体中没有数据域&#xff0c;所以一般把list_head嵌入到其他结构中使用 struct file_node { char c; struct list_head node; }; 此时&#xff…