Go-Admin 学习笔记(三)增加gorm数据访问层

2020-04-17  本文已影响0人  叫我null

Go-Admin本身的db也可以访问数据,也可以自己用其他比如gorm、xorm,这里我们用gorm

1、安装gorm

go get -u github.com/jinzhu/gorm

2、增加实体struct文件夹

cd /data/gopay
mkdir entitys
vi init.go
package entitys

import (
    "fmt"
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/mysql"
    "os"
)

var ShopDB *gorm.DB

func init() {
    ShopDB = createDB()
    //设置数据库连接池参数
    ShopDB.DB().SetMaxOpenConns(100) //设置数据库连接池最大连接数
    ShopDB.DB().SetMaxIdleConns(20)  //连接池最大允许的空闲连接数,如果没有sql任务需要执行的连接数大于20,超过的连接会被连接池关闭。
    ShopDB.HasTable(&Merchant{})
}

func createDB() *gorm.DB {
    //配置MySQL连接参数
    host := os.Getenv("DB_SHOP_HOST")
    port := os.Getenv("DB_SHOP_PORT")
    username := os.Getenv("DB_SHOP_USER")
    password := os.Getenv("DB_SHOP_PWD")
    Dbname := os.Getenv("DB_SHOP_NAME")
    timeout := "10s" //连接超时,10秒

    //拼接下dsn参数, dsn格式可以参考上面的语法,这里使用Sprintf动态拼接dsn参数,因为一般数据库连接参数,我们都是保存在配置文件里面,需要从配置文件加载参数,然后拼接dsn。
    dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local&timeout=%s", username, password, host, port, Dbname, timeout)
    //连接MYSQL, 获得DB类型实例,用于后面的数据库读写操作。
    db, err := gorm.Open(os.Getenv("DB_DEFAULT_TYPE"), dsn)
    if err != nil {
        panic("连接数据库失败, error=" + err.Error())
    }
    return db
}

3、建一个实体测试

vi merchant.go
package entitys

import (
    "fmt"
    "GoPay/constant"
    "github.com/jinzhu/gorm"
)

// 商户
type Merchant struct {
    MerchantId       int    `gorm:"column:merchant_id;primary_key" json:"merchant_id"` //
    MerchantName     string `json:"merchant_name"`                                     //
}

func (Merchant) TableName() string {
    return "xy_merchant"
}

func GetMerchantByMerchantId(merchantId int) (*Merchant, int) {
    merchant := Merchant{}
    err := ShopDB.Where("merchant_id=?", merchantId).First(&merchant).Error
    if gorm.IsRecordNotFoundError(err) {
        return nil, 404
    } else if err != nil {
        fmt.Println("查询失败", err)
        return nil, 500
    }
    return &merchant, 200
}

4、测试一些

func IndexApi(c *gin.Context) {
    m, _ := entitys.GetMerchantOrderByMerchantOrderId(7)
    //  m, _ := entitys.GetMerchantByMerchantId(10002)
    c.JSON(http.StatusOK, m)
}

现在可以愉快的自己操作数据库了

上一篇下一篇

猜你喜欢

热点阅读