go語言ORM——gorm操作指南

字號+ 編輯: Snake 修訂: Snake 來源: 2023-09-12 我要說兩句(1)

gorm是一個使用Go語言編寫的ORM框架。它文档齊全,對開發者友好,支持主流數據庫。

什麽是ORM?

圖片1.png


ORM優缺點

優點:

提高開發效率

缺點:

犧牲執行性能

犧牲靈活性

弱化SQL能力

gorm介紹

GORM官網學習文档

進入github.com,搜索golang orm,點擊jinzhu/gorm,然後點擊https://gorm.io官網:

圖片2.png


把頁面語言改成簡體中文,查看Docs(即文档),學習gorm

安裝

go get -u github.com/jinzhu/grom

連接數據庫

連接不同的數據庫都需要導入對應數據的敺動程序,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

import (
"github.com/jinzhu/gorm"
_"github.com/jinzhu/gorm/dialects/mysql"
)
 
func main(){
db, err := gorm.Open("myqul","user:password@(localhost)/dbname?charset=utf8mb4&parseTime=True&loc=Local")
defer db.Close()
}

連接PostgreSQL

基本上同上,注意引入對應postgres敺動並正確指定gorm.Open()參數。

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()
}

連接Sqlite3(是一個文档數據庫)

基本代碼同上,注意引入對應sqlite敺動並正確指定gorm.Open()參數。

import(
"github.com/jinzhu/gorm"
_"github.com/jinzhu/gorm/dialects/sqlite"
)
func mian(){
db, err := gorm.Open("sqlite3","/tmp/gorm.db") // 文档的路徑
defer db.Close()
}

連接SQL Server

基本代碼同上,注意引入對應mssql敺動並正確指定grom.Open()參數。

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

GORM基本示例

注意:

1.本文以MySQL數據庫爲例,講解GORM各項功能的主要使用方法。

2.往下閲讀本文前,你需要有一個能夠成功連接上的MySQL數據庫實例。

Docker快速創建MySQL實例

如果不會安裝MySQL或者嬾得安裝,可以使用命令快速運行一個MySQL8.0.19實例,當然前提死要有docker環境。

在本地的13306耑口運行一個名爲mysql8019,root用戶名密碼爲root1234的MySQL容器環境:

docker run --name mysql8019 -p 13306:3306 -e MYSQL_ROOT_PASSWORD=root1234 -d mysql:8.0.19

在另外啓動一個MySQL Client連接上面的MySQL環境,密碼爲上一步指定的密碼root1234:

docker run -it --network host --rm mysql mysql -h127.0.0.1 -P13306 --default-character-set=utf8mb4-uroot -p

創建數據庫

在使用GORM前手動創建數據庫db1:

CREATE DATABASE db1;

GORM操作MySQL

使用GORM連接上面的db1進行創建、查詢、更新、刪除操作。

package main
 
import (
"fmt"
"github.com/jinzhu/gorm"
_"github.com/jinzhu/gorm/dialects/mysql"
)
 
// UserInfo用戶信息
type UserInfo struct {
ID unit
Name string
Gender string
Hobby string
}
 
func main(){
// 連接MySQL數據庫
db, err := gorm.Open("mysql","root:root1234@(127.0.0.1:3306)/db?charset=utf8mb4&parseTime=true&loc=Local")
if err != nil {
panic(err)
}
defer db.Close()
 
// 創建表 自動遷移(把結構體和數據表進行對應)
db.AutoMigrate(&UserInfo{})
 
// 創建數據行  
u1 := UserInfo{1,"七米","男","籃球"}
u2 := UserInfo{2,"沙河娜紥","女","足球"}
 
// 創建記錄
db.Create(&u1)
db.Create(&u2)
 
// 查詢
var u = new(UserInfo)
db.First(u) // 查詢表中第一條數據保存到u
fmt.Printf("%#v\n",u)
 
var uu UserInfo
db.Find(&&uu,"hobby=?","足球")
fmt.Printf("%#v\n",uu)
 
// 更新
db.Model(&u).Update("hobby","雙色球")
 
// 刪除
db.Delete(&u)
}

GORM Model定義

在使用ORM工具時,通常我們需要在代碼中定義模型(Models)與數據庫中的數據表進行映射,在GORM中模型(Models)通常是正常定義的結構體、基本的go類型或它們的指針。同時也支持sql.Scanner及driver.Valuer接口(interface)。

gorm.Model

爲了方便模型定義,GORM内置了一個gorm.Model結構體。

Gorm.Model是一個包含了ID,CreateAt,UpdateAt,DeleteAt四個字段的Golang結構體。

// gorm.Model定義
type Model struct {
ID        unit `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
}

模型定義示例

type user struct {
gorm.Model  // 内嵌gorm.Model
Name            string
Age              sql.NullInt64 // 零值類型
Birthday          *time.Time
Email             string  `gorm:"type:varchar(100);unique_index"`
Role              string  `gorm:"size:255"` // 設置字段大小爲255
MemberNumber   *string  `gorm:"unique;nor null"` // 設置會員(member number)唯一且不爲空
Num              int  `gorm:"AUTO_INCREMENT"` // 設置num爲自增類型
Address           string  `gorm:"index:addr"` // 給address字段創建名爲addr的索引
IgnoreMe          int  `gorm:"-"` // 忽略本字段
}


閲完此文,您的感想如何?
  • 有用

    1

  • 沒用

    0

  • 開心

    0

  • 憤怒

    0

  • 可憐

    0

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • GO語言GORM如何更新字段

  • gorm如何創建記錄與模型定義需要注意什麽

  • gorm一般查詢與高級查詢

  • GORM時間戳跟蹤及CURD(增刪改查)

我要說說
網上賓友點評
1 樓 IP 61.149.***.224 的嘉賓 说道 : 很久前
没什么难度的感觉