编写一个新的 Dialect

GORM 原生支持 sqlite, mysql, postgresmssql
你可以通过实现 dialect interface 接口,来新增对某个新的数据库的支持。
有一些关系型数据库与mysqlpostgres 语法兼容,因此你可以直接使用这两个数据库的 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)
文档更新时间: 2021-06-22 15:13   作者:gunnchen