美文网首页
Go-Admin 学习笔记(三)增加gorm数据访问层

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

作者: 叫我null | 来源:发表于2020-04-17 10:41 被阅读0次

    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)
    }
    

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

    相关文章

      网友评论

          本文标题:Go-Admin 学习笔记(三)增加gorm数据访问层

          本文链接:https://www.haomeiwen.com/subject/fdasvhtx.html