1. 程式人生 > 實用技巧 >Go之Gorm簡介及使用案例

Go之Gorm簡介及使用案例

簡介

ORM

Object-Relationl Mapping, 它的作用是對映資料庫和物件之間的關係,方便我們在實現資料庫操作的時候不用去寫複雜的sql語句,把對資料庫的操作上升到對於物件的操作

Gorm

gorm就是基於Go語言實現的ORM庫。

類似於Java生態裡大家聽到過的Mybatis、Hibernate、SpringData等。

下載使用Gorm庫

下載gorm庫
go get -u github.com/jinzhu/gorm

// 這是比較原始的方式,現在有了go mod,我們可以更方便的配置,甚至不用配置。
// 寫好程式碼,在檔案下執行go build,go.mod會自動新增對於gorm的依賴包
CURD
package main

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jinzhu/gorm"
	"os"
	"time"
)

const (
	dbUser     string = "test"
	dbPassword string = "ZHOUjian.22"
	dbHost     string = "121.36.43.223"
	dbPort     int    = 3306
	dbName     string = "cmdb"
)

var dsn string = fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&loc=Local&parseTime=true",
	dbUser, dbPassword, dbHost, dbPort, dbName)

type User3 struct {
	// 會從gorm嵌入一些欄位進來
	gorm.Model
	Name     string
	Password string
	Birthday time.Time
	Sex      bool
	Tel      string
	Addr     string
	Desc     string
}

type User4 struct {
  Id       int `gorm: "primary_key; auto_increment"`
	Name     string
	Password string
	Birthday time.Time
	Sex      bool
	Tel      string
	Addr     string
	Desc     string
}

func (*User4)TableName() string {
	return "user"
}
//type User4 struct {
//	Id         int    `gorm:"primary_key"`
//	Name       string `gorm:"type:varchar(32);unique;not null; default:''"`
//	Password   string
//	Birthday   time.Time `gorm:"type:date"`
//	Sex        bool
//	Tel        string `gorm:"column:telephone"`
//	Addr       string
//	Desciption string `gorm:"type:text"`
//}

func main() {
	db, err := gorm.Open("mysql", dsn)
	if err != nil {
		fmt.Println(err)
		os.Exit(-1)
	}

	// 建立表
	db.AutoMigrate(&User3{})
	db.AutoMigrate(&User4{})
  // 	fmt.Println(db.CreateTable(&User3{},&User4{}))
	//db.Model(&User{}).AddIndex("idx_name_addr", "name", "addr")
  
  
	db.Close()
}
判斷表是否存在
	// 判斷表是否存在
	fmt.Println(db.HasTable(&User3{}))
	fmt.Println(db.HasTable("user4"))
	db.Close()
刪除表
	fmt.Println(db.DropTable(&User3{},&User4{}))
修改表
	db.Model(&User3{}).ModifyColumn("birthday","date")
	db.Close()
刪除列
	db.Model(&User3{}).DropColumn("birthday")
新增刪除索引
	db.Model(&User3{}).AddIndex("idx_name","name")
	
// 聯合索引	  db.Model(&User3{}).AddIndex("idx_name_addr","name","addr")
	db.Close()

// 刪除索引
	db.Model(&User3{}).RemoveIndex("idx_name_addr")

// 建立UniqueIndex索引
	db.Model(&User3{}).AddUniqueIndex("idx_name","name")