簡介
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/
-
解壓到指定目錄, 例如:E:\mysql
-
管理員cmd到bin目錄 例如:E:\mysql\mysql-8.0.19-winx64\bin
-
執行: mysqld --initialize --console 記下密碼:-YML?i2uo7gz(密碼隨機生成,每次密碼不一樣,如果沒記住,刪掉data文件夾,重新執行該命令)
-
創建mysql8服務:mysqld --install mysql8
-
啟動mysql8:net start mysql8
-
登陸修改密碼
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
-
windows環境變量設置
-
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("")
}