gorm系列-簡單入門


簡介

GORM系列:b站搜七米

文檔:https://www.liwenzhou.com/posts/Go/gorm/

什么是ORM:Object(對象) Relational(關系) Mapping(映射)

對象:程序中的對象/實例 例如Go中的結構體實例

關系:關系數據庫 例如MySQL

gorm的官方文檔:https://gorm.io/zh_CN/docs/

案例

舉個不用gorm的例子

type UserInfo struct {
	ID uint
	Name string
	Gender string
	Hobby string
}

func main()  {
	u1 := UserInfo{1, "zisefeizhu", "男","籃球"}
	//將u1數據存入數據庫
	insert into userinfo values(1, "紫色飛豬","男","籃球");  //sql語句
}

要求開發不僅會go還要熟練掌握sql語句

使用gorm的例子

type UserInfo struct {
	ID uint
	Name string
	Gender string
	Hobby string
}

func main()  {
	u1 := UserInfo{1, "zisefeizhu", "男","籃球"}
	//將u1數據存入數據庫
	orm.Create(&u1)   //orm語句不要太簡單  
}

ORM優缺點

優點:提高開發效率

缺點:犧牲執行性能、犧牲靈活性、弱化SQL能力

入門

安裝gorm

E:\gostudent\gin\lesson19>go get -u github.com/jinzhu/gorm

**安裝mysql ** 下載地址:https://dev.mysql.com/downloads/mysql/

  1. 解壓到指定目錄, 例如:E:\mysql

  2. 管理員cmd到bin目錄 例如:E:\mysql\mysql-8.0.19-winx64\bin

  3. 執行: mysqld --initialize --console 記下密碼:-YML?i2uo7gz(密碼隨機生成,每次密碼不一樣,如果沒記住,刪掉data文件夾,重新執行該命令)

  4. 創建mysql8服務:mysqld --install mysql8

  5. 啟動mysql8:net start mysql8

  6. 登陸修改密碼

    e:\mysql\mysql-8.0.19-winx64\bin>mysql -uroot -p
    Enter password: ************
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 8
    Server version: 8.0.19
    
    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
    Query OK, 0 rows affected (0.22 sec)
    
    mysql> flush privileges;
    Query OK, 0 rows affected (0.06 sec)
    mysql> exit
    Bye
    e:\mysql\mysql-8.0.19-winx64\bin>mysql -uroot -p
    Enter password: 123456
    
  7. windows環境變量設置

  8. SQLyog連接

    mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';  #修改加密規則
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; #修改密碼加密策略
    Query OK, 0 rows affected (0.06 sec)
    
    mysql> flush privileges;  #刷新權限
    Query OK, 0 rows affected (0.04 sec)
    


GORM基本示例

使用SQLyog Professional 64 學習

package main

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

//UserInfo -->數據表
type UserInfo struct {
	ID int
	Name string
	Gender string
	Hobby string
}
func main() {
	//連接MySQL數據庫
	//方法1
	//connArgs := fmt.Sprintf("%s:%s@%s(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", "root","123456", "tcp","127.0.0.1", 3306, "db" )
	//db, err := gorm.Open("mysql", connArgs)
	//方法2    一定要細心啊
	db, err := gorm.Open("mysql","root:123456@tcp(127.0.0.1:3306)/db?charset=utf8mb4&parseTime=True&loc=Local")
	//panic: dial tcp [::1]:3306: connectex: No connection could be made because the target machine actively refused it. 數據庫沒打開 被拒絕

	if err != nil{
		panic(err)
	}
	defer db.Close()

	//創建表 自動遷移(把結構體和數據表進行對應)
	db.AutoMigrate(&UserInfo{})

	//創建數據行
	u1 := UserInfo{3, "紫色飛豬","男","直播"}
	db.Create(&u1)
}


簡單的增刪改查

package main

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

//UserInfo -->數據表
type UserInfo struct {
	ID int
	Name string
	Gender string
	Hobby string
}
func main() {
	//連接MySQL數據庫
	//方法1
	//connArgs := fmt.Sprintf("%s:%s@%s(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", "root","123456", "tcp","127.0.0.1", 3306, "db" )
	//db, err := gorm.Open("mysql", connArgs)
	//方法2    一定要細心啊
	db, err := gorm.Open("mysql","root:123456@tcp(127.0.0.1:3306)/db?charset=utf8mb4&parseTime=True&loc=Local")
	//panic: dial tcp [::1]:3306: connectex: No connection could be made because the target machine actively refused it. 數據庫沒打開 被拒絕

	if err != nil{
		panic(err)
	}
	defer db.Close()

	//創建表 自動遷移(把結構體和數據表進行對應)
	db.AutoMigrate(&UserInfo{})

	////創建數據行
	//u1 := UserInfo{3, "紫色飛豬","男","直播"}
	//db.Create(&u1)

	//查詢
	var u UserInfo
	db.First(&u)   //查詢一行
	fmt.Printf("u:%#v\n",u)
	var u1 UserInfo
	db.Last(&u1)   //查詢最后一行
	fmt.Printf("u1:%#v\n",u1)
	//更新
	db.Model(&u).Update("hobby","雙色球")
	//刪除
	db.Delete(&u).Delete("")
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM