golang操作数据库,三方库gorm更好用

golang操作数据库,之前用官方库"github.com/go-sql-driver/mysql"
对数据的处理很麻烦,代码一大堆,后来看到研发同事的代码都在用"github.com/jinzhu/gorm"
代码非常简洁,代码逻辑看起来也清晰,对于大并发处理也很友好,改进了下自己常用的代码:

package request

import (
	"github.com/jinzhu/gorm"
	"fmt"
)
type IManagement struct {//先定义数据结构
	IflyOSDevID string `gorm:"column:iflyos_devid"`
}

type DeviceInfo struct{
	Mac string `gorm:column:mac`
	Sn string `gorm:column:sn`
	Model string `gorm:column:model`
	Device_id string `gorm:column:device_id`
}

func openDb(table string) *gorm.DB {//连接和mysql server一样用open()方法
	db, err := gorm.Open("mysql", "aliyuncs.com)/"+table+"?charset=utf8&parseTime=True&loc=Local")
	//defer db.Close()
	if err != nil {
		fmt.Println(err)
		panic("连接数据库失败")
	}
	db.SingularTable(true)
	db.LogMode(false)
	return db
}
func Getdb(){
	
	db:=openDb("launcher")
	var iManagements []IManagement
	sql := "select iflyos_devid from iflyos_management"
	fmt.Println(sql)
	db.Raw(sql).Scan(&iManagements)
	fmt.Println(len(iManagements))
	fmt.Println(iManagements)
	db.Close()
	// db = db.Exec("update iflyos_active set device_id='', active_iflyos=1,active_kugou=1,kugou_expire=0,status=1,expire_reason=Null,iflyos_active_time=0,kugou_active_time=0")
	
	// fmt.Println("更新了", db.RowsAffected, "条数据")
	// db = db.Exec("update iflyos set iflyos_devid='', assign_count=0")
	// fmt.Println("更新了", db.RowsAffected, "条数据")
	// db = db.Exec("truncate iflyos_record")
	// fmt.Println("更新了", db.RowsAffected, "条数据")
}

func Getdbdev(){
	// 删除数据
	db:=openDb("aiot")
	var Devices []DeviceInfo
	sql := "select mac,sn,device_id,model from aiot.device_info order by id desc limit 100"
	fmt.Println(sql)
	db.Raw(sql).Scan(&Devices)
	fmt.Println(len(Devices))
	fmt.Println(Devices)
	db.Close()
	// db = db.Exec("update iflyos_active set device_id='', active_iflyos=1,active_kugou=1,kugou_expire=0,status=1,expire_reason=Null,iflyos_active_time=0,kugou_active_time=0")
	// fmt.Println("更新了", db.RowsAffected, "条数据")
	// db = db.Exec("update iflyos set iflyos_devid='', assign_count=0")
	// fmt.Println("更新了", db.RowsAffected, "条数据")
	// db = db.Exec("truncate iflyos_record")
	// fmt.Println("更新了", db.RowsAffected, "条数据")
}
db.Raw(sql):返回一个*DB的结构体,结构体包含value,value是一个interface{}


Scan():返回的是你要的结构体,用于将上面的value(interface{})扫描进你需要的struct

源码中的DB结构体:

// DB contains information for current db connection
type DB struct {
	sync.RWMutex//锁
	Value        interface{}//值
	Error        error//错误信息
	RowsAffected int64//受影响的行数

	// single db
	db                SQLCommon
	blockGlobalUpdate bool
	logMode           logModeValue
	logger            logger
	search            *search
	values            sync.Map

	// global db
	parent        *DB
	callbacks     *Callback
	dialect       Dialect
	singularTable bool

	// function to be used to override the creating of a new timestamp
	nowFuncOverride func() time.Time
}

常用的这几项:

sync.RWMutex//锁
Value        interface{}//值
Error        error//错误信息
RowsAffected int64//受影响的行数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值