Golang数据库jinzhu框架使用

文档地址

数据模型

//Account 储存数据结构
type Account struct {
	ID               int    `gorm:"primary_key"`
	AccountIP        string `gorm:"type:varchar(100);not null"`
	AccountNum       int32  `gorm:"type:int;not null"`
	AccountDateFirst time.Time
	AccountDate      time.Time
}

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

Gopkg.toml 中添加:

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

下载依赖包

dep ensure -update

2. 创建数据库连接

package db

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

var (
	dbhostsip    string        = "127.0.0.1:3306"
	dbusername   string        = "root"
	dbpassword   string        = "root"
	dbname       string        = "ysblog"
	maxOpenConns int           = 200              //设置打开数据库连接的最大数量
	maxIDConns   int           = 10               //空闲时最大连接数量
	maxLifeTime  time.Duration = time.Second * 10 // 连接过期时间 如不设置 连接会被一直保持
)

// DB 全局数据库使用变量
var DB *gorm.DB

//InitDB 初始化数据库
func InitDB() {
	connStr := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=true&loc=Local&readTimeout=10s&timeout=10s", dbusername, dbpassword, dbhostsip, dbname)
	db, err := gorm.Open("mysql", connStr)
	if err != nil {
		fmt.Println("====>", err)
		return
	}
	db.DB().SetMaxOpenConns(maxOpenConns)
	db.DB().SetMaxIdleConns(maxIDConns)
	db.DB().SetConnMaxLifetime(maxLifeTime)
	DB = db
}

3. 创建表

func main() {
	db.InitDB()//初始化数据库连接
	db.CreateTable(db.Account{}) //创建表
}
//CreateTable 创建表
func CreateTable(table interface{}) {
	if !DB.HasTable(table) {
		if err := DB.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8").CreateTable(table).Error; err != nil {
			panic(err)
		}
	}
}

4. 插入数据

func main() {
	db.InitDB()                  //初始化数据库连接
	db.CreateTable(db.Account{}) //创建表
	insert := db.Account{
		AccountIP:        "127.0.0.2",
		AccountNum:       0,
		AccountDateFirst: utils.GetCurrentTime(),
		AccountDate:      utils.GetCurrentTime(),
	}
	result := db.Account{}
	err := db.Select(db.Account{AccountIP: "127.0.0.2"}, db.Account{}, &result)
	if err != nil {
		db.Insert(&insert) //插入数据
	}
}
//Insert 插入数据
func Insert(table interface{}) error {
	if err := DB.Create(table).Error; err != nil {
		return err
	}
	return nil
}

5. 删除数据

func main() {
	db.InitDB()                  //初始化数据库连接
	db.CreateTable(db.Account{}) //创建表
	db.Delete(db.Account{ID: 5}, db.Account{})
}
//Delete 删除数据
func Delete(d interface{}, table interface{}) error {
	if err := DB.Where(d).Delete(table).Error; err != nil {
		return err
	}
	return nil
}

6. 修改数据

func main() {
	db.InitDB()                  //初始化数据库连接
	db.CreateTable(db.Account{}) //创建表
	db.Update(db.Account{AccountNum: 5}, db.Account{ID: 7})
}
//Update 修改数据
func Update(d interface{}, table interface{}) {
	DB.Model(table).Updates(d)
}

7. 查询一条数据

func main() {
	db.InitDB()                  //初始化数据库连接
	db.CreateTable(db.Account{}) //创建表
	result := db.Account{}
	err := db.Select(db.Account{AccountIP: "127.0.0.2"}, db.Account{}, &result)
	if err != nil {
		//db.Insert(&insert) //插入数据
	}
}
//Select 查询数据(一个)
func Select(d interface{}, table interface{}, result interface{}) error {
	res := DB.Model(table).Where(d).First(result)
	return res.Error
}

8. 查询所有数据

func main() {
	db.InitDB()                  //初始化数据库连接
	db.CreateTable(db.Account{}) //创建表
  result := []db.Account{}
	count := db.SelectAll("ID<10", db.Account{}, &result)
	fmt.Println(count)
}
//SelectAll 查询所有数据  count计算查询数量
func SelectAll(d interface{}, table interface{}, result interface{}) int {
	var count int
	err := DB.Model(table).Where(d).Count(&count).Find(result).Error
	if err != nil {
		fmt.Println(err)
	}
	return count
}
发布了177 篇原创文章 · 获赞 41 · 访问量 10万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览