Skip to content

Go 中使用 gorm 适配自定义数据库驱动

1258字约4分钟

Go

2024-02-28

GORM 官方支持的数据库类型有: MySQL, PostgreSQL, SQLite, SQL Server 和 TiD. 但是我们有的时候需要使用 gorm 接入一些其他自定义的数据库, 例如: Oracle或者 Yashan.

在本文中, 我们将介绍如何在 Go 中使用 gorm 这个流行的 ORM 框架来连接 Yashan 数据库, 并进行一些基本的增删改查操作. 事实上这个方法适用于任何一个你想适配的数据库, 如果其官方未适配 gorm 的话.

前提环境

在开始之前, 我们需要准备以下内容:

  • 一台安装了 Yashan 数据库的服务器, 以及一个可以访问的数据库用户和密码. 在本文中, 我们假设服务器的 IP 地址是 192.168.1.100, 端口号是 1688, 数据库名是 yasdb, 用户名是 sys, 密码是 123456.
  • 一台安装了 Go 的开发环境, 以及设置好了 GOPATHGOROOT 环境变量. 在本文中, 我们假设 Go 的版本是 1.20, 并且使用了 go mod 来管理依赖包.
  • 一个可以编写和运行 Go 代码的编辑器或 IDE.

安装 gorm 和驱动

要使用 gorm 来链接 Yashan 数据库, 我们需要安装 gorm 本身, 以及一个适用于 Yashan 的驱动. 由于当前 Yashan 官网上未给出 Go 语言的相关驱动, 我们使用官网提供的 C 驱动然后利用 go 调用 C 实现.

go get -u gorm.io/gorm

执行上述命令后, 我们在 Go 项目中成功安装了 gorm.

连接数据库

首先我们来看一下 gorm 内部支持的数据库是如何连接的.

main.go
pacakge main

import (
  "gorm.io/driver/postgres"
  "gorm.io/gorm"
)

dsn := "host=localhost user=gorm password=gorm dbname=gorm port=9920 sslmode=disable TimeZone=Asia/Shanghai"
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})

gorm 官方文档-Open中可以看到, func Open 接受一个 Dialector 对象. 而我们现在需要做的就是根据 Yashan 数据库的 C 驱动, 实现 Dialector 对象相关的所有接口即可.

dialect.go

现在, 我们即可以使用以下代码进行数据库的连接了.

main.go
package main

import (
	"fmt"
	// 此处需要引入驱动外部库
	"gorm.io/gorm"
	"strings"
)

const (
	connectFormat = `%s/%s@%s:%s`
)

func InitYashan() {
	replacer := strings.NewReplacer("@", "\\@", "/", "\\/", "\\", "\\\\")
	datasource := config.Conf.Datasource
	dsn := fmt.Sprintf(connectFormat, replacer.Replace(datasource.Username), replacer.Replace(datasource.Password), datasource.Host, datasource.Port)
	yasDB, err := gorm.Open(Open(dsn), &gorm.Config{})
	// 检查是否有错误
	if err != nil {
		fmt.Println("连接数据库失败: ", err)
		panic(err)
	}
	dataBaseModel, err := yasDB.DB()
	if err != nil {
		global.LOG.Error("连接数据库失败, error=" + err.Error())
		panic(err)
	}
	dataBaseModel.SetMaxOpenConns(datasource.MaxOpenConns)
	dataBaseModel.SetMaxIdleConns(datasource.MaxIdleConns)
}




变更历史

最后更新于: 查看全部变更历史
  • docs: update docs

    于 2024/11/19
  • 整理tag

    于 2024/11/4
  • 整理文章代码格式

    于 2024/11/1
  • 整理文章格式

    于 2024/10/29
  • update

    于 2024/10/17
  • 新增文字+CRLF全部替换为LF

    于 2024/10/17
  • 升级主题+规整文章格式

    于 2024/10/15
  • 升级主题+新增文章+修改格式

    于 2024/10/14
  • 升级版本+规整文档中的格式

    于 2024/10/11
  • 给予文件夹顺序

    于 2024/9/24
  • first commit

    于 2024/9/20