如何使用Beego使用gorm

时间:2016-09-08 01:56:49

标签: go orm beego go-gorm

Beego ORM暂时不完整(例如它不支持外键约束)。所以我决定将gorm与Beego一起使用。这样做的正确方法是什么?我见过gorm中的示例代码:

import (
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/postgres"
)

func main() {
  db, err := gorm.Open("postgres", "host=myhost user=gorm dbname=gorm sslmode=disable password=mypassword")
  defer db.Close()
}

但每次在每个控制器功能中都必须连接数据库吗?有没有办法使用像长轮询连接这样的东西?

2 个答案:

答案 0 :(得分:3)

gorm使用嵌入在gorm.DB中的sql.DB类型

  

DB是表示零或更多池的数据库句柄   基础连接。多个并发使用是安全的   够程。 sql包创建并释放连接   自动;它还维护一个空闲连接池。

因此,您可以在代码中全局使用获取的数据库, 如果你想要请求处理中的隔离级别使用事务

tr:=db.Begin()

答案 1 :(得分:1)

因此,正如@Uvelichitel指出的那样,您的选择是在全局级别定义您的db连接并从所需位置使用它(可能是打开连接和模型层以查询结果的主要功能) )。

所以你基本上可以有一个包含数据库连接逻辑的文件:

// appname/conn.go

package db

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

var (
  // this one gonna contain an open connection
  // make sure to call Connect() before using it
  Conn *gorm.DB
)

func Connect(dbConnString string) (*gorm.DB, error) {
  db, err := gorm.Open("postgres", dbConnString)
  Conn = db
  return db, err
}

db.Connect致电main.go后,您可以在应用程序的任何位置使用已打开的连接db.Conn(只需确保将此软件包导入到以下位置:使用)。

import "appname/db"

func main() {
  conn, _ := db.Connect("host=localhost user=postgres ...")
  // db.Conn is initialized and ready for usage anywhere else

在单个main.go文件中可以实现相同的结果,直接移动全局变量声明和连接逻辑。