日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

golang-gorm自動建表問題_Golang

作者:a...Z ? 更新時間: 2023-05-16 編程語言

golang-gorm自動建表

定義結構體

設置主鍵、自增、和獨立索引

聯合索引用addindex

type User struct {
?? ?//通過在字段后面的標簽說明,定義golang字段和表字段的關系
?? ?//例如 `gorm:"column:username"` 標簽說明含義是: Mysql表的列名(字段名)為username
?? ?//這里golang定義的Username變量和MYSQL表字段username一樣,他們的名字可以不一樣。
?? ?Id int64 `gorm:"column:username;not null;type:int(4) primary key auto_increment;comment:'用戶名'"`
?? ?Password string `gorm:"column:password;type:varchar(30);index:idx_name"`
?? ?//創建時間,時間戳
?? ?CreateTime int64 `gorm:"column:createtime"`
}

定義變化的表名

全局變量

var TablePre = "2021"

實現interface

func (u *User) TableName() string{
?? ?return "userss"+table
}

執行sql

dbSlaveClient, err := gorm.GetClient(xxxx)
?? ?if err != nil {
?? ??? ?fmt.Println(err)
?? ?}

?? ?TablePre = "20210"
?? ?err = dbSlaveClient.Model(&User{}).Debug().
?? ??? ?AutoMigrate(&User{}).
?? ??? ?AddIndex("idx_cr_pass","createtime","password").Error

判斷是否有無

?if !dbSlaveClient.HasTable(&User{}) {
? ? dbSlaveClient.AutoMigrate(&User{})
? ? if dbSlaveClient.HasTable(&User{}) {
? ? ? fmt.Println("balance表創建成功")
? ? } else {
? ? ? fmt.Println("balance表創建失敗")
? ? }
? } else {
? ? fmt.Println("表已存在")
? }

GORM概述

官網文檔另人看的頭疼,還是記錄一些常用的api吧,基本都是復制官方文檔做些例子。

GORM給我最直觀的感受:程序員只需關系結構體,操作結構體,無需關注如何操作數據庫。

  • 優點:提高開發效率
  • 缺點:使用反射犧牲性能,犧牲靈活性

GORM保護數據的安全,比如說結構體刪除了某個字段,原來在數據庫中的表不會刪那個字段。結構體指定改了表名,原來生成的表不會被刪除。其將有數據安全風險的可能全部規避掉,交由開發人員手動去篩查。

概述

在這里插入圖片描述

  • 數據表 <===> 結構體
  • 數據行 <===> 結構體實例
  • 字段 ?<===> 結構體字段

快速入門

  • db.AutoMigrate(&UserInfo{}):意思是自動遷移,自動遷移為給定模型運行自動遷移,只會添加缺少的字段,不會刪除/更改當前數據。就是說如果結構體加了新的字段,會給表也加上新字段。
  • db.Create()傳遞一個結構體,自動找到結構體對應的表,并將結構體的值作為一條記錄插入表中,可以傳指針或者非指針,都可以。
  • db.First()傳遞一個結構體的指針,自動找到結構體對應的表,并將表中第一條記錄賦值給結構體,必須因為指針。
  • db.Find(out,where...)按照條件查詢,傳遞一個結構體的指針,自動找到結構體對應的表,并按照where中的條件查詢記錄,賦值給結構體。還有很多查詢的語法,后續再說。
  • db.Model().Update()傳遞一個查詢出來有值結構體,通過Updata將其對應的字段更新,并傳遞到表中。
  • db.Delete(&u)刪除傳遞進來的數據庫對應的記錄。
package main

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

// UserInfo 用戶信息
type UserInfo struct {
	ID     uint
	Name   string
	Gender string
	Hobby  string
}

func main() {
	db, err := gorm.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/gormDB?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)
	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)
}

總結

原文鏈接:https://blog.csdn.net/qq_39787367/article/details/112567822

欄目分類
最近更新