【Gorm】Gorm基础入门

1、Gorm概述

1、Gorm是一个神奇的,对开发人员友好的Golang ORM库(类比Java中的Mybatis)。 => 什么是ORM库?

​ ORM(Object-Relational Mapping)框架是一种将对象模型表示映射到关系型数据库的技术。ORM框架可以帮助开发人员将数据从数据库中提取出来,封装成对象,并且将对象的属性与关系数据库中的表和列进行映射。这样开发人员就可以使用面向对象的方式操作数据库,而无需关心底层数据库的细节。

​ ORM框架通常包含对象模型和关系模型之间的映射代码,这个映射可以使用注解、XML配置文件、DSL等方式进行定义。ORM框架还提供了一些其他的功能,例如缓存、事务管理和查询优化等,这些功能都可以提高应用程序的性能和开发效率。常见的Go语言ORM框架有GORM、XORM、beego ORM等。

1、Gorm包含如下几个方面的特性

  • 全特性ORM
  • 模型关联(一对一、一对多、一对多(反向)、多对多、多态关联)
  • 钩子(Before/After、Create/Save/Update/Delete/Find)
  • 预加载
  • 事务
  • 复合主键
  • SQL构造器
  • 自动迁移
  • 日志
  • 基于Gorm回调编写可拓展插件
  • 全特性测试覆盖
  • 开发者友好

2、安装

​ go intsall -u gitub.com/jinzhu/gorm

// 1、在GOPATH下创建目录(可以通过go env查看GOPATH具体位置),例如我查出来是如下位置
/Users/chenzhihui/go

// 2、新建一个项目目录(注意命名规范:在我的这个博客底部:https://blog.csdn.net/qq_45151059/article/details/130276066?spm=1001.2014.3001.5501)
mkdir gormsample

// 3、将目录初始化为go目录:会返回go: creating new go.mod: module gormsample表示成功初始化
go mod init <项目名称> => go mod init gormsample

// 4、因为我们主要是对在go中使用Gorm进行学习,所以导入相关依赖
go get -u github.com/jinzhu/gorm

// 5、至此安装完毕

2、入门指南

1、模型定义

​ 模型一般都是普通的Golang结构体,Go的基本数据类型,或者是指针。sql.Scannerdriver.Valuer,同时也支持接口。如下所示:

typer User struct {
  gorm.Model
  Name string
  Age sql.NullInt64
  Birthday *time.Time
  Email string `gorm:"type:varchar(100):unqiue_index"`
  Role string `gorm:"size:255"` // 设置字段大小为255字节
  MemberNumer *string `gorm:unique;not null` // 设置MemberNumber字段唯一且不为空
  Num int `gorm:"AUTO_INCREMENT"` // 设置Num字段自增
  Address string `gorm:"index:addr"` // 给Address创建一个名字是addr的索引
  IgnoreMe int `gorm:"-"` // 忽略这个字段
}

2、结构标签

标签说明
Column指定列的名称
Type指定列的类型
Size指定列的大小,默认是255
PRIMARY_KEY指定一个列作为主键
UNIQUE指定一个唯一的列
DEAFAULT指定一个默认的值
PRECISION指定列的数据不为空
NOT NULL指定一个列的数据是否自增
AUTO_INCREMENT创建带或不带名称的索引,同名创建复合索引
INDEX类似索引,创建一个唯一索引
UNIQUE_INDEX将struct设置为embedded
EMBEDDED设置嵌入式结构的前缀名称
EMBEDDED_PREFIX忽略这些字段

3、关联的标签结构

标签
MANY2MANY指定连接表名称
FOREIGNKEY指定外键
ASSOCIATION_FOREIGNKEY指定关联外键
POLYMORPHIC指定多态类型
POLYMORPHIC_VALUE指定多态的值
JOINTABLE_FOREIGNKEY指定连接表的外键
ASSOCIATION_JOINTABLE_FOREIGNKEY指定连接表的关联外键
SAVE_ASSOCIATIONS是否自动保存关联
ASSOCIATION_AUTOUPDATE是否自动更新关联
ASSOCIATION_AUTOCREATE是否自动创建关联
ASSOCIATION_SAVE_REFERENCE是否引用自动保存的关联
PRELOAD是否自动预加载关联

3、惯例

1、gorm.Model

​ gorm.Model是一个包含一些基本字段的结构体,包含的字段有ID、CreateAt、UpdateAt、DeleteAt,我们可以使用它来嵌入到模型当中,也可以用它来建立自己的模型,例子如下:

// gorm.Model的定义
type Model struct {
  ID uint `gorm:"primary_key"`
  CreateAt time.Time
  UpdateAt time.Time
  DeleteAt time.Time
}

// 将字段‘ID’、‘CreateAt’、‘UpdateAt’、‘DeleteAt’注入到‘user’模型中
type User struct {
  gorm.Model
  Name string
}

// 声明 gorm.model 模型
type User struct {
  ID int
  Name string
}

2、ID作为主键

​ gorm默认使用id作为主键名

// 1、默认情况下ID为主键名
type User struct {
  ID string
}

// 2、设置字段‘AnimalID’为默认主键
type Animal struct {
  AnimalID int64 `gorm:"primary_key"`
  Name string
  Age int64
}

3、复数表名

​ 表名是结构体名称的复数形式

// 1、如表User
type user struct { // 默认表名是users
  
}

// 2、设置‘User’的表名为‘profiles’
func (User) TableName() string {
  return "profiles"
}

// 3、同上
func (u User) TableName() string {
  if u.Role == "admin" {
    return "admin_user"
  } else {
    return "users"
  }
}

// 4、如果设置禁用表名的复数形式属性为true,“User”的表名将是‘user’
db.SingularTable(true)

4、指定表名

// 用‘User’结构体创建‘delete_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 = ?", "zhihui").Delete()  // delete from deleted_users where name = 'zhihui'

5、修改默认表名

​ 可以通过DefaultTableNameHandler字段来对表名使用任何规则

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

6、蛇形列名

​ 列名是字段名的蛇形小写形式

type User struct {
  ID uint							// 字段名是`id`
  Name string					// 字段名是`name`
  Birthday time.Time	// 字段名是`birthday`
  CreateAt time.Time 	// 字段名是`create_at`
}

// 重写列名
type Animal struct {
  AnimalId Int64 `gorm:"column:beast_id"`
  ... // 省略
}

7、时间戳跟踪

​ CreateAt代表是首次创建记录的当前时间、UpdateAt是记录更新时的当前时间、DeleteAt是软删除的当前时间

3、链接数据库

1、链接数据库

​ 为了链接数据库,首先到导入数据库驱动程序,如:

import _ "github.com/go-sql-driver/mysql"

gorm一斤包含了一些驱动程序,为了方便记录他们导入到路径,可以向如下导入mysql驱动程序

import _ "github.com/jinzhu/gorm/dialects/mysql"
// import _ "github.com/jinzhu/gorm/dialects/postgres" 	// postgres数据库
// import _ "github.com/jinzhu/gorm/dialects/sqlite" 		// sqlite数据库
// import _ "github.com/jinzhu/gorm/dialects/mssql"			// mssql数据库

2、支持的数据库

1)MySQL(注意:为了正确处理time.Time,需要包含parseTime作为参数)

import (
  "github.com/jinzhu/gorm"
  _ "github.com/jinzhu/gorm/dialects/mysql"
)

func main() {
  db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8&parseTime=True&loc=Local")
  defer db.Close()
}

2)PostgresSQL

import (
  "github.com/jinzhu/gorm"
  _ "github.com/jinzhu/gorm/dialects/postgres"
)

func main() {
  db, err := gorm.Open("postgres", "host=myhost port=myport user=gorm dbname=gorm password=mypassword")
  defer db.Close()
}

3)Sqlite3

import (
  "github.com/jinzhu/gorm"
  _ "github.com/jinzhu/gorm/dialects/sqlite"
)

func main() {
  db, err := gorm.Open("sqlite3", "/tmp/gorm.db")
  defer db.Close()
}

4)SQL Server

import (
  "github.com/jinzhu/gorm"
  _ "github.com/jinzhu/gorm/dialects/mssql"
)

func main() {
  db, err := gorm.Open("mssql", "sqlserver://username:password@localhost:1433?database=dbname")
  defer db.Close()
}

本章主要作为,学习gorm框架的入门,了解到了gorm是什么,gorm相关基础操作,以及它与数据库定义之间的关系,最后讲解的是如何与常用的数据库类型进行连接,下一篇文章中,我们将讲解关于gorm中的CRUD接口,帮助我们进一步掌握学习!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder陈、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值