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)
}
现在可以愉快的自己操作数据库了