重要的提示

它只是0700的original example的GORP的替代品.它带来了一些起源的陷阱.此答案可用作原始答案的替代品.但它并没有解决陷阱.

请看看这个unswer和@MaxGabriel的answer的评论,以解决陷阱.

我建议使用@ MaxGabriel的解决方案来保护您的应用程序免受某些慢速* DDoS攻击.并减少(在某些情况下)DB压力.

原始答案

@rauyran rights,你必须在init函数内调用InitDB(进入控制器包).

这里有完整的例子(太多):

/app

/controllers

app.go

gorm.go

init.go

/models

user.go

[...]

user.go

// models/user.go

package models

import "time" // if you need/want

type User struct { // example user fields

Id int64

Name string

EncryptedPassword []byte

Password string `sql:"-"`

CreatedAt time.Time

UpdatedAt time.Time

DeletedAt time.Time // for soft delete

}

gorm.go

//controllers/gorm.go

package controllers

import (

"github.com/jinzhu/gorm"

_ "github.com/lib/pq" // my example for postgres

// short name for revel

r "github.com/revel/revel"

// YOUR APP NAME

"yourappname/app/models"

"database/sql"

)

// type: revel controller with `*gorm.DB`

// c.Txn will keep `Gdb *gorm.DB`

type GormController struct {

*r.Controller

Txn *gorm.DB

}

// it can be used for jobs

var Gdb *gorm.DB

// init db

func InitDB() {

var err error

// open db

Gdb, err = gorm.Open("postgres", "user=uname dbname=udbname sslmode=disable password=supersecret")

if err != nil {

r.ERROR.Println("FATAL", err)

panic( err )

}

Gdb.AutoMigrate(&models.User{})

// unique index if need

//Gdb.Model(&models.User{}).AddUniqueIndex("idx_user_name", "name")

}

// transactions

// This method fills the c.Txn before each transaction

func (c *GormController) Begin() r.Result {

txn := Gdb.Begin()

if txn.Error != nil {

panic(txn.Error)

}

c.Txn = txn

return nil

}

// This method clears the c.Txn after each transaction

func (c *GormController) Commit() r.Result {

if c.Txn == nil {

return nil

}

c.Txn.Commit()

if err := c.Txn.Error; err != nil && err != sql.ErrTxDone {

panic(err)

}

c.Txn = nil

return nil

}

// This method clears the c.Txn after each transaction, too

func (c *GormController) Rollback() r.Result {

if c.Txn == nil {

return nil

}

c.Txn.Rollback()

if err := c.Txn.Error; err != nil && err != sql.ErrTxDone {

panic(err)

}

c.Txn = nil

return nil

}

app.go

package controllers

import(

"github.com/revel/revel"

"yourappname/app/models"

)

type App struct {

GormController

}

func (c App) Index() revel.Result {

user := models.User{Name: "Jinzhup"}

c.Txn.NewRecord(user)

c.Txn.Create(&user)

return c.RenderJSON(user)

}

init.go

package controllers

import "github.com/revel/revel"

func init() {

revel.OnAppStart(InitDB) // invoke InitDB function before

revel.InterceptMethod((*GormController).Begin, revel.BEFORE)

revel.InterceptMethod((*GormController).Commit, revel.AFTER)

revel.InterceptMethod((*GormController).Rollback, revel.FINALLY)

}

正如您所看到的,这就像为GORM修改了Revel的预订.

对我来说很好.结果:

{

"Id": 5,

"Name": "Jinzhup",

"EncryptedPassword": null,

"Password": "",

"CreatedAt": "2014-09-22T17:55:14.828661062+04:00",

"UpdatedAt": "2014-09-22T17:55:14.828661062+04:00",

"DeletedAt": "0001-01-01T00:00:00Z"

}

revel MySQL_mysql – 如何在Revel Controller中访问Gorm?相关推荐

  1. mye连接mysql数据库_MySQL_如何在Java程序中访问mysql数据库中的数据并进行简单的操作,在上篇文章给大家介绍了Myeclip - phpStudy...

    如何在Java程序中访问mysql数据库中的数据并进行简单的操作 在上篇文章给大家介绍了Myeclipse连接mysql数据库的方法,通过本文给大家介绍如何在Java程序中访问mysql数据库中的数据 ...

  2. Java访问静态常量_Java如何在Spring EL中访问静态方法或常量?

    在这个例子中,您将学习如何使用Spring Expression Language访问类范围的方法或常量.要访问类范围的方法或常量T(),例如,您将需要使用Spring EL的运算符T(java.la ...

  3. python middleware_python – 如何在Flask MIddleware中访问请求

    我想在中间件中访问request.url. Flask app – test.py from flask import Flask from middleware import TestMiddlew ...

  4. 如何在web项目中访问HTML页面

    为什么同样在web工程webContent目录下建了一个html页面,http://localhost:8080/springmvcDemo/index.html访问却报404? 为什么在web工程w ...

  5. android 心率动画,如何在Android Wearable中访问心率传感器?

    在我完成以下操作后开始为我工作: >从手表中卸载我的应用程序 adb -s localhost:4444 uninstall com.example.android.wearable.jumpi ...

  6. 头信息_如何在 Spring REST Controller 中获取 HTTP 头信息

    介绍 在本篇文章中,我们将研究如何在 Spring Rest Controller 中访问 HTTP 头信息. 首先,我们将使用 @RequestHeader 注解分别或同时读取 HTTP 头信息. ...

  7. 了解如何在Google Colaboratory中构建深度学习系统

    原文来自特拉字节:https://telabytes.com/article/preview?id=119 这是练习深度学习的好时机.现有的主要深度学习框架如TensorFlow.Keras和PyTo ...

  8. 如何在Javascript中访问对象的第一个属性?

    本文翻译自:How to access the first property of an object in Javascript? Is there an elegant way to access ...

  9. ASP.NET中MVC添加Controller以及访问其Action

    场景 ASP.NET中MVC编程模式简介与搭建HelloWorld项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10679 ...

  10. 如何在 Windows 主机上访问本地局域网中的 Linux 主机

    如何在 Windows 主机上访问本地局域网中的 Linux 主机 使用 Xshell 建立远程连接   在 Windows 主机上是可以访问本地局域网中的 Linux 主机的.这样做之所以可行,是因 ...

最新文章

  1. 百度网页分享js代码
  2. Oracle的LINUX安装
  3. 网易云音乐TFBOYS线上演唱会破纪录,稳定线上体验如何实现?
  4. Request和Response-学习笔记02【请求转发和request共享数据、Request_获取ServletContext、request登录案例】
  5. 低功耗蓝牙onscanresult 出来名字为空_浅析BLE5.0蓝牙模块在智能家居的运用
  6. SQL Agent服务无法启动如何破
  7. oracle 客户端配置
  8. STC15W单片机解析GPS数据
  9. 计算机如何进行数值计算
  10. html cat文本,网页管理好管家CatHtml
  11. 苹果电脑连接打印机操作
  12. linux下内存如何释放,如何释放linux的内存
  13. UVA - 10827 Maximum sum on a torus(dp最大子矩阵和)
  14. Unity3d组合键
  15. 移动APP测试,adb工具,常用的命令(1)
  16. 微信小程序-从相册获取图片,视频 使用相机拍照,录像上传+服务器(nodejs版)接收
  17. 常用的web服务器软件整理(转载)
  18. vue使用地图api
  19. 3dmax:3dmax三维VR渲染设置之摄像机设置案例应用之自由摄影打造动画效果之图文教程
  20. 网页自动关机代码HTML,电脑如何自动关机

热门文章

  1. 单一窗口关区备案_【亚东关务】单一窗口集中申报来了,集报备案、集报清单详细操作手册...
  2. 2022-2028年中国密码机行业竞争现状及投资策略研究报告
  3. 2022-2028年中国铝合金行业市场运营格局及前景战略分析报告
  4. 蓝牙 sig base uuid_蓝牙,从系统开机说起
  5. 一分钟解决 The server selected protocol version TLS10 is not accepted 问题
  6. 遍历文件夹进行点云格式转换 PCD转BIN BIN转PCD PCD转TXT TXT转PCD PLY转PCD
  7. python360_Python实现360账号登录
  8. this关键字的作用
  9. 上云一时爽,遇坑泪两行
  10. Linux电源管理(五)thermal【转】