GORM Dialects

未匹配的标注
本文档最新版为 v2,旧版本可能放弃维护,推荐阅读最新版!

编写一个新的 Dialect

GORM 原生支持 sqlite, mysql, postgres 和 mssql。

你可以通过实现 dialect interface 接口,来新增对某个新的数据库的支持。

有一些关系型数据库与 mysql 和 postgres 语法兼容,因此你可以直接使用这两个数据库的 dialect 。

Dialect 专属的数据类型

一些 SQL 语法的 dialects 支持他们自定义的,非标准的字段类型,如 PostgreSQL 中的 jsonb 字段类型。GORM 支持一些类似此种类型,下面是这些类型的简单实用范例。

PostgreSQL

GORM 支持 PostgreSQL 专有的字段类型:

  • jsonb
  • hstore

以下这是 Model 的定义:

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

type Document struct {
    Metadata postgres.Jsonb
    Secrets  postgres.Hstore
    Body     string
    ID       int
}

你可以这样子使用 Model:

password := "0654857340"
metadata := json.RawMessage(`{"is_archived": 0}`)
sampleDoc := Document{
  Body: "This is a test document",
  Metadata: postgres.Jsonb{ metadata },
  Secrets: postgres.Hstore{"password": &password},
}

// 将范例数据写入数据库
db.Create(&sampleDoc)

// 读取数据,来检测是否正确写入
resultDoc := Document{}
db.Where("id = ?", sampleDoc.ID).First(&resultDoc)

metadataIsEqual := reflect.DeepEqual(resultDoc.Metadata, sampleDoc.Metadata)
secretsIsEqual := reflect.DeepEqual(resultDoc.Secrets, resultDoc.Secrets)

// 应该打印 "true"
fmt.Println("Inserted fields are as expected:", metadataIsEqual && secretsIsEqual)

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/gorm/v1/dialect...

译文地址:https://learnku.com/docs/gorm/v1/dialect...

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~