> GORM是Golang目前比較熱門的數據庫ORM操作庫,對開發者也比較友好,使用非常方便簡單
[TOC]
## 安裝依賴包
~~~
//安裝MySQL驅動
go get github.com/go-sql-driver/mysql
//安裝gorm包
go get github.com/jinzhu/gorm
~~~
## 導入依賴包
~~~
import (
//導入MYSQL數據庫驅動,這里使用的是GORM庫封裝的MYSQL驅動導入包,實際上大家看源碼就知道,這里等價于導入github.com/go-sql-driver/mysql
//這里導入包使用了 _ 前綴代表僅僅是導入這個包,但是我們在代碼里面不會直接使用。
_ "github.com/jinzhu/gorm/dialects/mysql"
//導入gorm
"github.com/jinzhu/gorm"
)
~~~
## 創建User表
~~~
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`username` varchar(30) NOT NULL COMMENT '賬號',
`password` varchar(100) NOT NULL COMMENT '密碼',
`createtime` int(10) NOT NULL DEFAULT 0 COMMENT '創建時間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
~~~
## 簡單例子
~~~
package main
import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
"time"
)
//定義User模型,綁定user表,ORM庫操作數據庫,需要定義一個struct類型和MYSQL表進行綁定或者叫映射,struct字段和MYSQL表字段一一對應
//在這里User類型可以代表mysql user表
type User struct {
//通過在字段后面的標簽說明,定義golang字段和表字段的關系
//例如 `gorm:"column:username"` 標簽說明含義是: Mysql表的列名(字段名)為username
//這里golang定義的Username變量和MYSQL表字段username一樣,他們的名字可以不一樣。
Username string `gorm:"column:username"`
Password string `gorm:"column:password"`
//創建時間,時間戳
CreateTime int64 `gorm:"column:createtime"`
}
//設置表名,可以通過給struct類型定義 TableName函數,返回當前struct綁定的mysql表名是什么
func (u User) TableName() string {
//綁定MYSQL表名為user
return "user"
}
func main() {
//配置MySQL連接參數
username := "gintest" //賬號
password := "gin123456" //密碼
host := "127.0.0.1" //數據庫地址,可以是Ip或者域名
port := 3306 //數據庫端口
Dbname := "gintest" //數據庫名
//通過前面的數據庫參數,拼接MYSQL DSN, 其實就是數據庫連接串(數據源名稱)
//MYSQL dsn格式: {username}:{password}@tcp({host}:{port})/{Dbname}?charset=utf8&parseTime=True&loc=Local
//類似{username}使用花括號包著的名字都是需要替換的參數
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", username, password, host, port, Dbname)
//連接MYSQL
db, err := gorm.Open("mysql", dsn)
if err != nil {
panic("連接數據庫失敗, error=" + err.Error())
}
//定義一個用戶,并初始化數據
u := User{
Username:"tizi365",
Password:"123456",
CreateTime:time.Now().Unix(),
}
//插入一條用戶數據
//下面代碼會自動生成SQL語句:INSERT INTO `user` (`username`,`password`,`createtime`) VALUES ('tizi365','123456','1540824823')
if err := db.Create(u).Error; err != nil {
fmt.Println("插入失敗", err)
return
}
//查詢并返回第一條數據
//定義需要保存數據的struct變量
u = User{}
//自動生成sql: SELECT * FROM `user` WHERE (username = 'tizi365') LIMIT 1
isNotFound := db.Where("username = ?", "tizi365").Take(&u).RecordNotFound()
if isNotFound {
fmt.Println("找不到記錄")
return
}
//打印查詢到的數據
fmt.Println(u.Username,u.Password)
//更新
//自動生成Sql: UPDATE `user` SET `password` = '654321' WHERE (username = 'tizi365')
db.Model(User{}).Where("username = ?", "tizi365").Update("password", "654321")
//刪除
//自動生成Sql: DELETE FROM `user` WHERE (username = 'tizi365')
db.Where("username = ?", "tizi365").Delete(User{})
}
~~~
## gorm錯誤處理
> gorm庫在執行數據庫操作的時候,如果出現錯誤,則會更新gorm.DB的Error屬性,Error屬性默認為nil,因此在執行數據庫操作后檢測下Error屬性是否為nil即可知道有沒有錯誤發生
~~~
//插入記錄后,檢測Error是否為nil
if err := db.Create(u).Error; err != nil {
fmt.Println("插入失敗", err)
return
}
~~~
- 基礎知識
- 開發環境
- 包名規則
- 包初始化 (init)
- 基礎數據類型
- 基礎類型轉換
- 格式化輸出
- go指針
- 流程控制語句
- 函數定義
- 匿名函數
- 數組和切片
- map集合
- 結構體
- Interface接口
- 日期處理
- 數學計算
- 正則表達式
- 協程 (并發處理)
- channel
- waitgroup
- mutex (鎖機制)
- websocket
- protobuf
- Redis
- 錯誤處理
- 打包程序
- NSQ消息隊列
- 單元測試
- beego
- 安裝入門
- Gin
- 快速入門
- 路由與控制器
- 處理請求參數
- 表單驗證
- 處理響應結果
- 渲染HTML模版
- 訪問靜態文件
- Gin中間件
- Cookie處理
- Session處理
- Gin上傳文件
- swagger
- pprof性能測試
- GORM
- 入門教程
- 模型定義
- 數據庫連接
- 插入數據
- 查詢數據
- 更新數據
- 刪除數據
- 事務處理
- 關聯查詢
- 屬于 (BELONG TO)
- 一對一 (Has One)
- 一對多 (Has Many)
- 多對多 (Many to Many)
- 預加載 (Preloading)
- 錯誤處理
- 第三方常用插件
- viper 讀取配置文件
- zap 高性能日志
- Nginx代理配置
- Goland 快捷鍵