gin_gorm

article/2025/4/24 17:20:27

一、使用形式

1、引入gorm包

import "github.com/jinzhu/gorm"

2、导入数据库驱动

import _ "github.com/go-sql-driver/mysql"为了方便记住导入路径,GORM包装了一些驱动:
import _ "github.com/jinzhu/gorm/dialects/mysql"
// import _ "github.com/jinzhu/gorm/dialects/postgres"
// import _ "github.com/jinzhu/gorm/dialects/sqlite"
// import _ "github.com/jinzhu/gorm/dialects/mssql"
所以可以用以下两种形式来使用mysql:
1、
import ("github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql"
)
2、
import ("github.com/jinzhu/gorm"_ "github.com/go-sql-driver/mysql"
)

3、连接数据库

// 连接数据库用户名:密码@tcp(ip:port)/数据库?charset=utf8&parseTime=True&loc=Localdb, err := gorm.Open("mysql", "root:123456@tcp(localhost:3306)/go_project?charset=utf8&parseTime=True&loc=Local")if err != nil {panic(err)}defer db.Close() // 关闭空闲的连接

4.DDL操作

type User struct {Id intName stringAge int
}// 创建表
db.Table("user").CreateTable(&User{})   // 指定表名db.CreateTable(&User{})                 // 不指定表名,模型后面会加个s

DML操作

// 1. 增//db.Create(&models.User{Name: "李四", Age: 18, Addr: "xxx", Pic: "/static/upload/pic.png", Phone: "123456789"})//查询var user models.User//db.First(&user, 1) // 默认id//db.First(&user, "name=?", "张三") //  // 指定字段//fmt.Println(user)// 更新//db.First(&user, 1)//db.Model(&user).Update("age", 22)//db.Model(&user).Update("addr", "zs-xxxx")// 删除db.First(&user, 2)db.Delete(&user)

模型定义

用作数据库数据转换和自动建表

模型名和表名的映射关系

  1. 规则
    • 第一个大写字母变为小写,
    • 遇到其他大写字母变为小写并且在前面加下划线,
    • 连着的几个大写字母,只有第一个遵循上面的两条规则,其他的大写字母转为小写,不加下划线,遇到小写,前面的第一个大写字母变小写并加下划线
    • 复数形式
  2. 举例
    • User --> users 首字母小写,复数
    • UserInfo --> user_infos
    • DBUserInfo --> db_user_infos
    • DBXXXXUserInfo --> dbxxxx_user_infos

在默认表名上加其他规则

// 在默认表名前加sys_前缀gorm.DefaultTableNameHandler = func (db *gorm.DB, defaultTableName string) string  {return "sys_" + defaultTableName;
}自定义表名:
func (模型) TableName() string{return "新的表名"
}package modelsimport "github.com/jinzhu/gorm"type GormModel struct {gorm.ModelName string
}func (GormModel) TableName() string {return "test_gorm_model"
}

结构体字段名和列名的对应规则

  1. 规则 * 列名是字段名的蛇形小写
  2. 举例
    • Name --> name
    • CreatedTime --> create_time
  3. 可以通过gorm标签指定列名,AnimalId int64 `gorm:"column:beast_id"`

gorm.Model

基本模型定义gorm.Model,包括字段ID,CreatedAt,UpdatedAt,DeletedAt

只需要在自己的模型中指定gorm.Model匿名字段,即可使用上面的四个字段

// 添加字段 `ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt`
type User struct {gorm.ModelName string
}

ID:主键自增长

CreatedAt:用于存储记录的创建时间

UpdatedAt:用于存储记录的修改时间

DeletedAt:用于存储记录的删除时间

结构体标签gorm的使用 

type UserInfo struct {Id int `gorm:"primary_key"`Name string `gorm:"index"`Age int 
}

gorm标签属性值

  • -: 忽略,不映射这个字段 `gorm:"-"`
  • primary_key:主键 `gorm:"primary_key"`
  • AUTO_INCREMENT:自增 `gorm:"AUTO_INCREMENT"`
  • not null:不为空,默认为空 `gorm:"not null"`
  • index:索引, `gorm:"index"`
    • 创建索引并命名: `gorm:"index:idx_name_code"`
    • 优化查询,相当于图书的目录
  • unique_index:唯一索引 `gorm:"unique_index"`

  • unique:唯一 `gorm:"unique"`

  • column:指定列名 `gorm:"column:user_name"`

  • size:字符串长度,默认为255 `gorm:"size:64"`

  • type:设置sql类型 `gorm:"type:varchar(100)"` // 不推荐直接改类型
  • default `default:'galeone'` 默认值

多个属性值之间用分号分隔(英文的;):`gorm:"size:64;not null"`

 一对一

package relate_tables// 一对一
type User struct {Id   intName stringAge  intAddr string
}type UserProfile struct {Id     intPic    stringCPic   stringPhone  stringUser   User // 关联关系UserID int
}

 

// 一对一
// 属于
type User struct {Id   intName stringAge  intAddr string
}type UserProfile struct {Id    intPic   stringCPic  stringPhone string//User   User // 关联关系User User `gorm:"ForeignKey:UId;AssociationForeignKey:Id"` // 关联关系//UserID int // 默认关联字段UId int //uid
}

 包含

// 包含type User struct {Id intName stringAge intAddr stringPId int}type UserProfile struct {Id intPic stringCPic stringPhone stringUser User `gorm:"ForeignKey:PId;AssociationForeignKey:Id"`  // 关联关系}

 

 一对多

// 一对多type User2 struct {Id intName stringAge intAddr stringArticles []Article `gorm:"ForeignKey:UId;AssociationForeignKey:Id"`
}type Article struct {Id intTitle stringContent stringDesc string// 外键UId int
}

 

 多对多

type Article2 struct {AId int `gorm:"primary_key:true"`Title stringContent stringDesc stringTags []Tag `gorm:"many2many:Article2s2Tags"`  // ;ForeignKey:AId;AssociationForeignKey:TId}type Tag struct {TId int `gorm:"primary_key:true"`Name stringDesc string}

 

 

 一对一操作


http://chatgpt.dhexx.cn/article/qEA16ju8.shtml

相关文章

【GIC】配置GIC

本章介绍如何在裸机环境中启用和配置兼容GICv3的中断控制器。 目录 一、全局设置 二、单独PE设置 2.1 Redistributor配置 2.2 CPU接口配置 2.3 PE配置 三、SPI, PPI, SGI配置 3.1设置SPI的目标PE 附:寄存器介绍 附1:GICD_CTLR 附2:…

大寰AG-95夹爪指尖更换、结构示意图及通讯协议转换器说明

注意: 在对手爪进行任何操作之前,请先关闭机器人和夹持电源。 大寰AG-95夹爪指尖更换更换步骤: 1. 使用 M3 内六角螺丝刀卸下指尖螺丝,拆卸磨损的指尖。 2. 清洁手指件并彻底擦干。 3. 取出指尖上φ3x6 mm 定位销。 4. 将…

使用Landsat系列数据来检测喜马拉雅地区的冰湖溃决(Georg Veha等人,RSE,2018)

一、背景 这是一篇做冰湖溃决的文章,作者主要使用了random forest来检测喜马拉雅地区的冰湖溃决现象,这项成果发表在了Remote Sensing of Environment上。 文献连接:https://doi.org/10.1016/j.rse.2017.12.025 文献引用:Georg Ve…

App设计灵感之十二组精美的智能家居App设计案例

通过手机远程启动家里的各种家用电器,让我们回到家后可以享受到舒适的环境,这便是智能家居给我们带来的便利。 ① Smart Hub Application design by Ariuka ② Smart Home by Srgi Mi ③ Smart Home Mobile App by Ghulam Rasool ④ Smart Home Mobile …

基恩士KV8000通过HT3S-EIS-MDN网关与大寰机器人交换数据

一、概述 本文主要介绍使用HI-TOP网关 HT3S-EIS-MDN在基恩士KV8000 PLC和大寰RGI系列旋转抓手之间进行数据交换。 解决的问题:基恩士PLC KV8000监控和大寰RGI系列旋转抓手。 解决方法:使用HI-TOP网关 HT3S-EIS-MDN。基恩士KV8000支持EthterNet/IP协议…

CARD耐药数据库Linux使用

一、背景 关于耐药性有很多数据库可以使用,但是CARD的优势在于数据库较为准确,只有经过文章进行验证后的基因才会被记录 二、软件链接 软件github: GitHub - arpcard/rgi: Resistance Gene Identifier (RGI). Software to predict resistomes from p…

(原创)用红黄蓝RYB色相环(伊登色相环)代替RGB(RGI/RGV)色相环

作者:❄️固态二氧化碳❄️ (主页) 链接:(原创)用红黄蓝RYB色相环(伊登色相环)代替RGB(RGI/RGV)色相环 - 固态二氧化碳的博客 - CSDN博客 来源:CSDN博客 发表时间:2019年05月28日 12:33:57 著作权归作者所有。商业转载请联系作者获…

APT、ET、RGI、ICQ

越来越大的屏幕尺寸和越来越多的需要显示屏常亮应用,要求手机厂商必须从各个方向考虑来提升电池续航时间。一般而言,手机上常用的有两种 PA 的省电技术,一种是平均功率跟踪技术(APT),另外一种是包络跟踪&am…

十、ABP

一、官网 安装 安装成功Core 2.2版本的 转载于:https://www.cnblogs.com/fger/p/10641811.html

abp Step1

refs: 1)下载模板后用vs2017打开 2)Web项目设置为起始项目 3)在包管理终端下选择EntityFramework为默认项目,运行"Update-Database",创建数据库 4)运行项目,默认用户admin密码123qwe

ABP框架入门

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

Abp v2.8.0发布 路线图

ABP框架和ABP商业版v2.8已经发布.这篇文章将涵盖这些发布中的新增内容和项目的中期路线图. ABP框架2.8有哪些新增内容? 你可在GitHub的发行说明中看到所有的变更.这篇博客只包括重要的一些功能/变更. SignalR集成包 我们已经发布了一个新的包用来集成SignalR到基于ABP框架应用…

Abp 业务异常源码解读

Abp 业务异常源码解读 最近一直在读代码整洁之道,我在读到第三章函数的3.9 使用异常替代返回错误码,其实在我的开发经历中都是使用返回错误码给到前端,之前在阅读ABP官网文档中就有看到过使用异常替代异常的做法,当时自己还是比较…

abp快速入门#3

abp快速入门#3 使用AbpHelper.CLI快速实现crud 使用AbpHelper.CLI快速实现crud https://github.com/EasyAbp/AbpHelper.CLI 按照使用说明安装abphelper dotnet tool install -g EasyAbp.AbpHelper参照例子创建Todo实体对象。 执行abphelper自动生成代码,-d 参数为…

abp官网下载的项目如何跑起来

目录 前言 一、pandas是什么? 二、使用步骤 1.下载项目 2.解压压缩包运行文件 3.在项目路径里面找到这两个文件,把数据库位置写上去,例如本地就local host 4.在工具里面找到程序包管理控制台 5.运行成功 6.设置启动项 7.运行成功就会有相…

【转】ABP源码分析三十三:ABP.Web

ABP.Web模块并不复杂,主要完成ABP系统的初始化和一些基础功能的实现。 AbpWebApplication : 继承自ASP.Net的HttpApplication类,主要完成下面三件事 一,在Application_Start完成AbpBootstrapper的初始化。整个ABP系统的初始化就是通过AbpBoo…

ABP学习 之 准备

学习ABP准备 ABP准备数据库准备后端启动前端启动 ABP准备 到ABP官网下载Free Template 将下载到的压缩包解压到目录 由于当时选择使用vue为前端,所以vue子目录是前端代码,aspnet-core为后端代码 数据库准备 准备一个数据库,设置好用户的o…

LoRa及LoRaWAN简介

目录 1、什么是LoRa和LoRaWAN 1.1 LoRa和LoRaWAN的区别 1.2 LoRa扩频技术介绍 1.2.1 什么是扩频技术 1.2.2 扩频技术的作用 1.2.3 扩频技术常用术语介绍 1.3 LoRaWAN帧结构 1.4 硬件方案介绍 1.4.1 终端设备方案 1.4.2 网关方案 2、LoRaWAN网络架构 3、LoRaWAN终端设备分类 …

vue之table表格的合并

目录 vue之table表格的动态合并vue之table表格的动态合并 后台给数据 处理断层vue之table表格的动态合并 后台给数据 前端处理断层根据后台数据合并前三列数据 vue之table表格的动态合并 vue之table表格的动态合并 后台给数据 处理断层 转载于:https://blog.csdn.…

HTML-table表格详解

文章目录 表格表格的说明(创建一个表格)1. 说明2. 设置 表头和表格边框样式设置1. 设置 长表格结构和补充1. 说明2. 结构3. 补充 表格布局(被淘汰)1. 表格布局(已经被 CSS 淘汰) 表格 表格的说明(创建一个表格) <!DOCTYPE html> <html><head><meta char…