gorm 的基本使用
×× http://gorm.book.jasperxu.com/ ×× 官方文檔
安裝
go get -u github.com/jinzhu/gorm
連接mysql
-
gorm連接mysql依賴mysql驅動,連接前需安裝mysql驅動
github.com/go-sql-driver/mysql
-
單獨連接示例
package database
import (
_ "github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
"log"
"time"
)
var Db *gorm.DB
var Error error
func init() {
Db, Error = gorm.Open("mysql", "admin:qwe123@/bilibili")
if Error != nil {
log.Fatal("database connect failed \n", Error.Error())
}
Db.LogMode(true) // 打印sql語句
Db.DB().SetMaxIdleConns(50) // 設置連接池
Db.DB().SetMaxOpenConns(50) // 設置最大連接數
Db.DB().SetConnMaxLifetime(time.Hour) // 設置最大連接超時
}
- 為了確保項目的完整進行,當項目初始化的時候,我們需要確保數據庫連接正常,當數據庫連接出錯的時候,可以使用
log.Fatal
的方式來停止項目。
基本使用
"""
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| mid | int(11) | NO | PRI | NULL | |
| following | int(11) | NO | | NULL | |
| follower | int(11) | NO | | NULL | |
| name | varchar(255) | YES | | NULL | |
| face | varchar(200) | YES | | NULL | |
| leavel | smallint(6) | YES | | NULL | |
| sex | varchar(255) | YES | | NULL | |
| sign | varchar(255) | YES | | NULL | |
+-----------+--------------+------+-----+---------+-------+
"""
- 測試表
簡單操作
package main
import (
"fmt"
"fresh.com/database"
)
type User struct {
Mid int
Following int
Follower int
UserName string `gorm:"Column:name"`
}
func (u User) TableName() string {
return "user_info"
}
/*
1. 映射表的結構體的名將會被轉換為表名,規則為:
(1): 單數變復數,如:User -> users, 有些會變成es結尾,按照英文的語法. 你可以通過Db.SingularTable(true)來禁用這一規則
(2): 大寫變下划線, 如:UserDetails -> user_details
(3): 為結構體制定表名, 給該結構體設置一個成員方法`TableName`, 返回值為string即可
(4): 可以在查詢的時候制定表名,如下所示"Table". 其余的時候該結構體的實例結構即可
(5): 制定列名,在結構體里面制定tag"gorm:Column:<你的表的列名>"即可
*/
func main() {
// 單條查詢
user := &User{}
database.Db.Table("user_info").First(&user) // SELECT * FROM `user_info` LIMIT 1
fmt.Println(user.Mid)
// 多條查詢
user_list := []User{}
database.Db.Table("user_info").Limit(10).Find(&user_list) // SELECT * FROM `user_info` LIMIT 10
fmt.Println(user_list)
// where 條件查詢
database.Db.Table("user_info").Where("mid=?", 102).Find(&user) // SELECT * FROM `user_info` WHERE (mid=102)
fmt.Println(user)
// 執行原始的sql查詢
raws, err := database.Db.Raw("SELECT COUNT(*) FROM user_info").Rows()
if err != nil {
fmt.Println(err)
}
for raws.Next() {
var mid int
raws.Scan(&mid)
fmt.Println(mid)
}
// 插入
insert_user := User{
Mid: 199624,
Follower: 25,
Following: 1234,
}
re := database.Db.Create(&insert_user).RowsAffected
fmt.Println(re) // 如果插入成功,單挑插入返回1,失敗則返回0
// 更新
database.Db.Table("user_info").Where("mid=?", 199624).Update("name", "ivy")
database.Db.Model(&user).Where("mid=?", 199624).Update("name", "BOB")
}