Gorm连接Mysql数据库及其语法

2024-03-25 23:44

本文主要是介绍Gorm连接Mysql数据库及其语法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Gorm连接Mysql数据库及其语法

文章目录

  • Gorm连接Mysql数据库及其语法
    • 前期工作
      • 找到Gorm的github项目
      • 简单了解相关MySQL语法
    • 启动数据库
    • 定义数据库模型注意点
    • Gorm Model定义
    • 结构体标签(tag)
      • 支持的结构体标记(Struct tags)
      • 关联相关标记(tags)
      • 主键(Primary Key)
      • 表名(Table Name)
      • 列名(Column Name)
      • 时间戳跟踪
        • CreatedAt
        • UpdatedAt
        • DeletedAt
    • 语法

前期工作

找到Gorm的github项目

  • 项目地址: github.com/jinzhu/gorm[http://github.com/jinzhu/gorm]
  • 拉取项目: go get -u github.com/jinzhu/gorm

简单了解相关MySQL语法


启动数据库

  • 前提: 想要连接数据库必须手动开启数据,以及手动创建数据库
  • 连接数据库:
    • 语法: db,err := gorm.Open(....)
    • 例子: db, err := gorm.Open("mysql", "root:password@(127.0.0.1:3306)/数据库?charset=utf8mb4")
    • 解析:
      • "mysql":表示你要连接数据库的类型
      • "root": 登陆数据库的用户名(默认root)
      • "password": 自己的密码
      • 数据库:表示要操作的数据库
      • "@(127.0.0.1:3306)": 表示需要连接的数据库本地地址,假如不记得端口是哪个可以在登录mysql后使用show global variables like 'port';查看端口
      • "?charset=utf8mb4":表示解析成的字节码

定义数据库模型注意点

  • 1.结构体的名称必须首字母大写,并且和数据库表名对应

  • 2.结构体中的字段名称首字母必须大写

  • 3.默认情况表名是结构体名称的复数形式

  • 4.可以使用结构体中自定义方法TableName改变结构体的默认表名称

    • //默认来说User结构体应该操作users表的
      //利用下述方法就可任意操作数据库中的表格
      func (User)TableName()string{return "user"
      }
      

Gorm Model定义

  • 作用: 模型结构体嵌入了 gorm.Model,那么就自动拥有上述这些字段和方法,可以避免重复编写,提高开发效率。

  • 默认字段:

    type Model struct {ID        uint `gorm:"primary_key"` //Id,一般默认id为主键(理解为表的第一个数据)CreatedAt time.Time					//创建 时间戳UpdatedAt time.Time					//更新 时间戳DeletedAt *time.Time `sql:"index"`  //删除 时间戳
    }
    
    • gorm:"primary_key"这里的被称为tag标签

结构体标签(tag)

支持的结构体标记(Struct tags)

在这里插入图片描述

关联相关标记(tags)

在这里插入图片描述


主键(Primary Key)

GORM 默认会使用名为ID的字段作为表的主键。

type User struct {ID   string // 名为`ID`的字段会默认作为表的主键Name string
}// 使用`AnimalID`作为主键
type Animal struct {AnimalID int64 `gorm:"primary_key"`Name     stringAge      int64
}

表名(Table Name)

表名默认就是结构体名称的复数,例如:

type User struct {} // 默认表名是 `users`// 将 User 的表名设置为 `profiles`
func (User) TableName() string {return "profiles"
}func (u User) TableName() string {if u.Role == "admin" {return "admin_users"} else {return "users"}
}// 禁用默认表名的复数形式,如果置为 true,则 `User` 的默认表名是 `user`
db.SingularTable(true)

也可以通过Table()指定表名:

// 使用User结构体创建名为`deleted_users`的表
db.Table("deleted_users").CreateTable(&User{})var deleted_users []User
db.Table("deleted_users").Find(&deleted_users)
 SELECT * FROM deleted_users;db.Table("deleted_users").Where("name = ?", "jinzhu").Delete()
 DELETE FROM deleted_users WHERE name = 'jinzhu';

GORM还支持更改默认表名称规则:

gorm.DefaultTableNameHandler = func (db *gorm.DB, defaultTableName string) string  {return "prefix_" + defaultTableName;
}

列名(Column Name)

列名由字段名称进行下划线分割来生成

type User struct {ID        uint      // column name is `id`Name      string    // column name is `name`Birthday  time.Time // column name is `birthday`CreatedAt time.Time // column name is `created_at`
}

可以使用结构体tag指定列名:

type Animal struct {AnimalId    int64     `gorm:"column:beast_id"`         // set column name to `beast_id`Birthday    time.Time `gorm:"column:day_of_the_beast"` // set column name to `day_of_the_beast`Age         int64     `gorm:"column:age_of_the_beast"` // set column name to `age_of_the_beast`
}

时间戳跟踪

CreatedAt

如果模型有 CreatedAt字段,该字段的值将会是初次创建记录的时间。

db.Create(&user) // `CreatedAt`将会是当前时间// 可以使用`Update`方法来改变`CreateAt`的值
db.Model(&user).Update("CreatedAt", time.Now())
UpdatedAt

如果模型有UpdatedAt字段,该字段的值将会是每次更新记录的时间。

db.Save(&user) // `UpdatedAt`将会是当前时间db.Model(&user).Update("name", "jinzhu") // `UpdatedAt`将会是当前时间
DeletedAt

如果模型有DeletedAt字段,调用Delete删除该记录时,将会设置DeletedAt字段为当前时间,而不是直接将记录从数据库中删除。


语法

  • 相关语法可查询官方网站

  • https://gorm.io/zh_CN/docs/create.html
    jinzhu") // UpdatedAt将会是当前时间


#### DeletedAt如果模型有`DeletedAt`字段,调用`Delete`删除该记录时,将会设置`DeletedAt`字段为当前时间,而不是直接将记录从数据库中删除。---## 语法- 相关语法可查询官方网站- https://gorm.io/zh_CN/docs/create.html

这篇关于Gorm连接Mysql数据库及其语法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作