2024-01-08|閱讀時間 ‧ 約 37 分鐘

[Go][ORM]Gorm

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



分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.