[Go][ORM]Gorm

小黑-avatar-img
發佈於後端
更新於 發佈於 閱讀時間約 18 分鐘

Gorm是Go當中一款ORM函數褲,有以下特點:

  • 支持連結
  • 支援鉤子函數Hook
  • 支援預先載入
  • 支援交易
  • 支援複合主鍵
  • 支援SQL生成器
  • 支援資料庫自動遷移
  • 支援自訂日誌
  • 可擴充性
  • 所有功能都被測試覆蓋


安裝

go get -u github.com/jinzhu/gorm


使用

插入

package main

import (
"crypto/md5"
"encoding/hex"
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
)

var (
db *gorm.DB
sqlConnection = "root:a123456@tcp(127.0.0.1:3306)/xxx​"
)

//資料表結構
type GormUser struct {
ID uint `json:"id"`
Phone string `json:"phone"`
Name string `json:"name"`
Password string `json:"password"`
}

//初始化
func init() {
//開啟資料庫連接
var err error
db, err = gorm.Open("mysql", sqlConnection)
if err != nil {
panic("failed to connect database")
}

//自動建立
db.AutoMigrate(&GormUser{})
}

func main() {
defer db.Close()
db.DB().SetMaxIdleConns(10)//閒置中的連線數上限
db.DB().SetMaxOpenConns(100)//開啟中的連線數上限

GormUser := GormUser{
Phone: "13888888888",
Name: "Shirdon",
Password: md5Password("666666"), //使用者密碼
}
db.Save(&GormUser) //儲存到資料庫
db.Create(&GormUser) //儲存到資料庫
}

//md5加密
func md5Password(str string) string {
h := md5.New()
h.Write([]byte(str))
return hex.EncodeToString(h.Sum(nil))
}


刪除

package main

import (
"crypto/md5"
"encoding/hex"
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
)

var (
db *gorm.DB
sqlConnection = "root:a123456@tcp(127.0.0.1:3306)/xxx​"
)

//資料表結構
type GormUser struct {
ID uint `json:"id"`
Phone string `json:"phone"`
Name string `json:"name"`
Password string `json:"password"`
}

//初始化
func init() {
//開啟資料庫連接
var err error
db, err = gorm.Open("mysql", sqlConnection)
if err != nil {
panic("failed to connect database")
}

//自動建立
db.AutoMigrate(&GormUser{})
}

func main() {
defer db.Close()
db.DB().SetMaxIdleConns(10)//閒置中的連線數上限
db.DB().SetMaxOpenConns(100)//開啟中的連線數上限

GormUser := GormUser{
Phone: "13888888888",
Name: "Shirdon",
Password: md5Password("666666"), //使用者密碼
}
db.Save(&GormUser) //儲存到資料庫
db.Create(&GormUser) //儲存到資料庫

//删除用户
var GormUser = new(GormUser)
db.Where("phone = ?", "13888888888").Delete(&GormUser)
}

//md5加密
func md5Password(str string) string {
h := md5.New()
h.Write([]byte(str))
return hex.EncodeToString(h.Sum(nil))
}


查詢

package main

import (
"crypto/md5"
"encoding/hex"
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
)

var (
db *gorm.DB
sqlConnection = "root:a123456@tcp(127.0.0.1:3306)/xxx​"
)

//資料表結構
type GormUser struct {
ID uint `json:"id"`
Phone string `json:"phone"`
Name string `json:"name"`
Password string `json:"password"`
}

//初始化
func init() {
//開啟資料庫連接
var err error
db, err = gorm.Open("mysql", sqlConnection)
if err != nil {
panic("failed to connect database")
}

//自動建立
db.AutoMigrate(&GormUser{})
}

func main() {
defer db.Close()
db.DB().SetMaxIdleConns(10)//閒置中的連線數上限
db.DB().SetMaxOpenConns(100)//開啟中的連線數上限

GormUser := GormUser{
Phone: "13888888888",
Name: "Shirdon",
Password: md5Password("666666"), //使用者密碼
}
db.Save(&GormUser) //儲存到資料庫
db.Create(&GormUser) //儲存到資料庫

//查詢
var GormUser = new(GormUser)
db.Where("phone = ?", "18888888888").Find(&GormUser)
db.First(&GormUser, "phone = ?", "18888888888")
fmt.Println(GormUser)
}

//md5加密
func md5Password(str string) string {
h := md5.New()
h.Write([]byte(str))
return hex.EncodeToString(h.Sum(nil))
}


更新

package main

import (
"crypto/md5"
"encoding/hex"
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
)

var (
db *gorm.DB
sqlConnection = "root:a123456@tcp(127.0.0.1:3306)/xxx​"
)

//資料表結構
type GormUser struct {
ID uint `json:"id"`
Phone string `json:"phone"`
Name string `json:"name"`
Password string `json:"password"`
}

//初始化
func init() {
//開啟資料庫連接
var err error
db, err = gorm.Open("mysql", sqlConnection)
if err != nil {
panic("failed to connect database")
}

//自動建立
db.AutoMigrate(&GormUser{})
}

func main() {
defer db.Close()
db.DB().SetMaxIdleConns(10)//閒置中的連線數上限
db.DB().SetMaxOpenConns(100)//開啟中的連線數上限

GormUser := GormUser{
Phone: "13888888888",
Name: "Shirdon",
Password: md5Password("666666"), //使用者密碼
}
db.Save(&GormUser) //儲存到資料庫
db.Create(&GormUser) //儲存到資料庫

//更新用户
var GormUser = new(GormUser)
err:=db.Model(&GormUser).Where("phone = ?", "18888888888").
Update("phone", "13888888888").Error
if err !=nil {
//do something
}
}

//md5加密
func md5Password(str string) string {
h := md5.New()
h.Write([]byte(str))
return hex.EncodeToString(h.Sum(nil))
}


交易

package main

import (
"crypto/md5"
"encoding/hex"
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
)

var (
db *gorm.DB
sqlConnection = "root:a123456@tcp(127.0.0.1:3306)/xxx​"
)

//資料表結構
type GormUser struct {
ID uint `json:"id"`
Phone string `json:"phone"`
Name string `json:"name"`
Password string `json:"password"`
}

//初始化
func init() {
//開啟資料庫連接
var err error
db, err = gorm.Open("mysql", sqlConnection)
if err != nil {
panic("failed to connect database")
}

//自動建立
db.AutoMigrate(&GormUser{})
}

func main() {
defer db.Close()
db.DB().SetMaxIdleConns(10)//閒置中的連線數上限
db.DB().SetMaxOpenConns(100)//開啟中的連線數上限

//開啟
tx := db.Begin()

GormUser := GormUser{
Phone: "18888888888",
Name: "Shirdon",
Password: md5Password("666666"), //使用者密碼
}

if err := tx.Create(&GormUser).Error; err != nil {
tx.Rollback()
fmt.Println(err)
}

db.First(&GormUser, "phone = ?", "18888888888")
//交易提交
tx.Commit()
}

//md5加密
func md5Password(str string) string {
h := md5.New()
h.Write([]byte(str))
return hex.EncodeToString(h.Sum(nil))
}


日誌

package main

import (
"crypto/md5"
"encoding/hex"
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
"log"
"os"
)

var (
db *gorm.DB
sqlConnection = "root:a123456@tcp(127.0.0.1:3306)/xxx​"
)

//資料表結構
type GormUser struct {
ID uint `json:"id"`
Phone string `json:"phone"`
Name string `json:"name"`
Password string `json:"password"`
}

//初始化
func init() {
//開啟資料庫連接
var err error
db, err = gorm.Open("mysql", sqlConnection)
if err != nil {
panic("failed to connect database")
}

//自動建立
db.AutoMigrate(&GormUser{})
}

func main() {
defer db.Close()
db.DB().SetMaxIdleConns(10)//閒置中的連線數上限
db.DB().SetMaxOpenConns(100)//開啟中的連線數上限

//開啟
tx := db.Begin()

GormUser := GormUser{
Phone: "18888888888",
Name: "Shirdon",
Password: md5Password("666666"), //使用者密碼
}

if err := tx.Create(&GormUser).Error; err != nil {
tx.Rollback()
fmt.Println(err)
}

db.First(&GormUser, "phone = ?", "18888888888")
//交易提交
tx.Commit()

db.LogMode(true)
db.SetLogger(log.New(os.Stdout, "\r\n", 0))
}

//md5加密
func md5Password(str string) string {
h := md5.New()
h.Write([]byte(str))
return hex.EncodeToString(h.Sum(nil))
}



留言
avatar-img
留言分享你的想法!
avatar-img
小黑與程式的邂逅
8會員
123內容數
嗨,我是一名程式設計師,會在這分享開發與學習紀錄。
2024/06/05
GOB Go官方有提供net/rpc的RPC套件。此套件提供GOB的編/解碼,且支援TCP或HTTP傳輸方式。它可以在伺服器端註冊多個不同類型物件。 遠端存取的要求條件 方法的類型可輸出 方法的本體可輸出 方法必須要有兩個參數是輸出或內建 方法的第二個參數是指標型 方法的返回類型為
Thumbnail
2024/06/05
GOB Go官方有提供net/rpc的RPC套件。此套件提供GOB的編/解碼,且支援TCP或HTTP傳輸方式。它可以在伺服器端註冊多個不同類型物件。 遠端存取的要求條件 方法的類型可輸出 方法的本體可輸出 方法必須要有兩個參數是輸出或內建 方法的第二個參數是指標型 方法的返回類型為
Thumbnail
2024/06/04
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
Thumbnail
2024/06/04
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
Thumbnail
2024/06/03
Gorm是一款性能極好的ORM,且友善,因此可以明顯的提高開發效率。 特點 全功能ORM 支持連結 支援Hook 支持預先載入 支援交易 支持復合主鍵 支持SQL生成器 支援資料庫自動遷移 支援自訂日誌 可擴充性 所有功能都被測試覆蓋 安裝 go get -u gor
Thumbnail
2024/06/03
Gorm是一款性能極好的ORM,且友善,因此可以明顯的提高開發效率。 特點 全功能ORM 支持連結 支援Hook 支持預先載入 支援交易 支持復合主鍵 支持SQL生成器 支援資料庫自動遷移 支援自訂日誌 可擴充性 所有功能都被測試覆蓋 安裝 go get -u gor
Thumbnail
看更多
你可能也想看
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
GOB Go官方有提供net/rpc的RPC套件。此套件提供GOB的編/解碼,且支援TCP或HTTP傳輸方式。它可以在伺服器端註冊多個不同類型物件。 遠端存取的要求條件 方法的類型可輸出 方法的本體可輸出 方法必須要有兩個參數是輸出或內建 方法的第二個參數是指標型 方法的返回類型為
Thumbnail
GOB Go官方有提供net/rpc的RPC套件。此套件提供GOB的編/解碼,且支援TCP或HTTP傳輸方式。它可以在伺服器端註冊多個不同類型物件。 遠端存取的要求條件 方法的類型可輸出 方法的本體可輸出 方法必須要有兩個參數是輸出或內建 方法的第二個參數是指標型 方法的返回類型為
Thumbnail
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
Thumbnail
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
Thumbnail
Gorm是一款性能極好的ORM,且友善,因此可以明顯的提高開發效率。 特點 全功能ORM 支持連結 支援Hook 支持預先載入 支援交易 支持復合主鍵 支持SQL生成器 支援資料庫自動遷移 支援自訂日誌 可擴充性 所有功能都被測試覆蓋 安裝 go get -u gor
Thumbnail
Gorm是一款性能極好的ORM,且友善,因此可以明顯的提高開發效率。 特點 全功能ORM 支持連結 支援Hook 支持預先載入 支援交易 支持復合主鍵 支持SQL生成器 支援資料庫自動遷移 支援自訂日誌 可擴充性 所有功能都被測試覆蓋 安裝 go get -u gor
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Thumbnail
https://line.me/ti/g2/cSv-HcDyFtExhwQnKPbhgWDo9-Lx1Cdi_uQQWA?utm_source=invitation&utm_medium=link_copy&utm_campaign=default
Thumbnail
https://line.me/ti/g2/cSv-HcDyFtExhwQnKPbhgWDo9-Lx1Cdi_uQQWA?utm_source=invitation&utm_medium=link_copy&utm_campaign=default
Thumbnail
方格的官方,好體恤格友們啊!
Thumbnail
方格的官方,好體恤格友們啊!
Thumbnail
這邊統整了所有過去發表過關於 QUERY 函式的教學分享,希望可以方便你按照順序閱讀和練習。 QUERY 可以用來查詢、篩選、聚集、排序資料,還可以做張簡易的資料透視表,是我在 Google 試算表上做數據分析、製作報告、製作儀表板時最常用的函式之一,既方便又好用,誠心推薦!
Thumbnail
這邊統整了所有過去發表過關於 QUERY 函式的教學分享,希望可以方便你按照順序閱讀和練習。 QUERY 可以用來查詢、篩選、聚集、排序資料,還可以做張簡易的資料透視表,是我在 Google 試算表上做數據分析、製作報告、製作儀表板時最常用的函式之一,既方便又好用,誠心推薦!
Thumbnail
Request內容 package main import ( "fmt" "log" "net/http" "strings" ) func request(w http.ResponseWriter, r *http.Request) { //這些資訊是輸出到伺服器端的列印訊息
Thumbnail
Request內容 package main import ( "fmt" "log" "net/http" "strings" ) func request(w http.ResponseWriter, r *http.Request) { //這些資訊是輸出到伺服器端的列印訊息
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News