Golang數據庫jinzhu框架使用

數據模型

<code>//Account 儲存數據結構 

type Account struct {
\tID int `gorm:"primary_key"`
\tAccountIP string `gorm:"type:varchar(100);not null"`
\tAccountNum int32 `gorm:"type:int;not null"`
\tAccountDateFirst time.Time
\tAccountDate time.Time
}/<code>

1. 引入 github.com/go-sql-driver/mysql

Golang數據庫jinzhu框架使用

Gopkg.toml 中添加:

<code>[[constraint]]
name = “github.com/go-sql-driver/mysql”
version = “1.0.0”/<code>

下載依賴包

<code>dep ensure -update/<code>

2. 創建數據庫連接

<code>package db

import (
\t"fmt"
\t"github.com/jinzhu/gorm"
\t"time"
)

var (
\tdbhostsip string = "127.0.0.1:3306"
\tdbusername string = "root"
\tdbpassword string = "root"
\tdbname string = "ysblog"
\tmaxOpenConns int = 200 //設置打開數據庫連接的最大數量
\tmaxIDConns int = 10 //空閒時最大連接數量
\tmaxLifeTime time.Duration = time.Second * 10 // 連接過期時間 如不設置 連接會被一直保持
)

// DB 全局數據庫使用變量
var DB *gorm.DB

//InitDB 初始化數據庫
func InitDB() {
\tconnStr := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=true&loc=Local&readTimeout=10s&timeout=10s", dbusername, dbpassword, dbhostsip, dbname)
\tdb, err := gorm.Open("mysql", connStr)
\tif err != nil {
\t\tfmt.Println("====>", err)
\t\treturn
\t}

\tdb.DB().SetMaxOpenConns(maxOpenConns)
\tdb.DB().SetMaxIdleConns(maxIDConns)
\tdb.DB().SetConnMaxLifetime(maxLifeTime)
\tDB = db
}/<code>

3. 創建表

Golang數據庫jinzhu框架使用


<code>func main() {
\tdb.InitDB()//初始化數據庫連接
\tdb.CreateTable(db.Account{}) //創建表
}
//CreateTable 創建表
func CreateTable(table interface{}) {
\tif !DB.HasTable(table) {
\t\tif err := DB.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8").CreateTable(table).Error; err != nil {
\t\t\tpanic(err)
\t\t}
\t}
}/<code>

4. 插入數據

<code>func main() {
\tdb.InitDB() //初始化數據庫連接
\tdb.CreateTable(db.Account{}) //創建表
\tinsert := db.Account{
\t\tAccountIP: "127.0.0.2",
\t\tAccountNum: 0,
\t\tAccountDateFirst: utils.GetCurrentTime(),
\t\tAccountDate: utils.GetCurrentTime(),
\t}
\tresult := db.Account{}
\terr := db.Select(db.Account{AccountIP: "127.0.0.2"}, db.Account{}, &result)
\tif err != nil {
\t\tdb.Insert(&insert) //插入數據
\t}
}
//Insert 插入數據
func Insert(table interface{}) error {
\tif err := DB.Create(table).Error; err != nil {
\t\treturn err
\t}
\treturn nil
}/<code>

5. 刪除數據

Golang數據庫jinzhu框架使用

<code>func main() {
\tdb.InitDB() //初始化數據庫連接
\tdb.CreateTable(db.Account{}) //創建表
\tdb.Delete(db.Account{ID: 5}, db.Account{})
}
//Delete 刪除數據
func Delete(d interface{}, table interface{}) error {
\tif err := DB.Where(d).Delete(table).Error; err != nil {
\t\treturn err
\t}
\treturn nil
}/<code>

6. 修改數據

<code>func main() {
\tdb.InitDB() //初始化數據庫連接
\tdb.CreateTable(db.Account{}) //創建表
\tdb.Update(db.Account{AccountNum: 5}, db.Account{ID: 7})

}
//Update 修改數據
func Update(d interface{}, table interface{}) {
\tDB.Model(table).Updates(d)
}/<code>

7. 查詢一條數據

<code>func main() {
\tdb.InitDB() //初始化數據庫連接
\tdb.CreateTable(db.Account{}) //創建表
\tresult := db.Account{}
\terr := db.Select(db.Account{AccountIP: "127.0.0.2"}, db.Account{}, &result)
\tif err != nil {
\t\t//db.Insert(&insert) //插入數據
\t}
}
//Select 查詢數據(一個)
func Select(d interface{}, table interface{}, result interface{}) error {
\tres := DB.Model(table).Where(d).First(result)
\treturn res.Error
}/<code>

8. 查詢所有數據

Golang數據庫jinzhu框架使用

<code>func main() {
\tdb.InitDB() //初始化數據庫連接
\tdb.CreateTable(db.Account{}) //創建表
result := []db.Account{}
\tcount := db.SelectAll("ID<10", db.Account{}, &result)
\tfmt.Println(count)
}
//SelectAll 查詢所有數據 count計算查詢數量
func SelectAll(d interface{}, table interface{}, result interface{}) int {
\tvar count int
\terr := DB.Model(table).Where(d).Count(&count).Find(result).Error
\tif err != nil {
\t\tfmt.Println(err)
\t}
\treturn count
}/<code>


分享到:


相關文章: