Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


GORM 使用手册

📄字数 1.9K
👁️阅读量 加载中...

GORM 是 Go 语言中最受欢迎的 ORM 库之一,它提供了强大的功能和简洁的 API,让数据库操作变得更加简单和易维护。本文档将介绍 XuguDB 对 GORM 框架的适配情况,并简易描述使用 GORM 开发 XuguDB 应用的 Demo 指南。

框架名称适配起始版本官网地址源框架下载地址XuguDB框架下载demo程序地址
GORM1.20.0GORM官网-版本发布列表xugu-gorm

提示

版本发布列表源代码压缩包即为产品压缩包。
其他适配版本可详见版本发布列表

一、方言包使用说明


方言压缩包解压,解压获取到的 xggorm 目录与 XuguDB Go 驱动一并放置到应用程序入口文件的同级目录下,或放置到 Go 语言包读取路径下。导入 xggorm 方言包与 XuguDB Go 驱动,使用 gorm.Open 方法创建 XuguDB连接,进行应用开发。

go
// 导入 xggorm 方言包与 XuguDB go 驱动
import (
  "xggorm"
  "fmt"
  "gorm.io/gorm"
  _ "gitee.com/XuguDB/go-xugu-driver"
)

func main() {
    // 连接串与 XuguDB go 驱动连接串格式一致。
    dsn := "IP=127.0.0.1;DB=SYSTEM;User=SYSDBA;PWD=SYSDBA;Port=5138;CURRENT_SCHEMA=SYSTEM;AUTO_COMMIT=on;CHAR_SET=UTF8"

    // 创建 XuguDB连接
    db, err := gorm.Open(xggorm.Open(dsn), &gorm.Config{})
    if err != nil {
        fmt.Printf("gorm open fail, err:%v dsn:%v\n", err, dsn)
    }

    if db != nil{
        fmt.Println("open conn sucess")
    }
}

二、连接示例程序

本章节将介绍在 GORM 应用连接 XuguDB 。

2.1 前提条件

  • 已安装 Go。
  • 已安装 GORM。
  • 已部署 XuguDB 12.0.0 或有能连接访问的虚谷数据库实例。

2.2 操作步骤

2.2.1 修改 demo.go 文件,编写数据库连接信息

导入方言包与 Go 驱动

go
package main

import (
    // 导入方言包
  "xggorm"
  "fmt"
  "gorm.io/gorm"
  // 导入 go 驱动
  _ "gitee.com/XuguDB/go-xugu-driver"
)

定义表模型。

go
// 定义模型
type User struct {
    ID   int   `gorm:"primaryKey"`
    Name string `gorm:"size:255"`
    Age  int
}

根据 方言包使用说明 中配置说明和 XuguDB 连接信息修改数据库连接串,并创建数据库连接。

go
func main() {
    dsn := "IP=192.168.2.216;DB=SYSTEM;User=SYSDBA;PWD=SYSDBA;Port=5138;CURRENT_SCHEMA=SYSTEM;AUTO_COMMIT=on;CHAR_SET=UTF8"

    db, err := gorm.Open(xggorm.Open(dsn), &gorm.Config{})
    if err != nil {
        fmt.Printf("gorm open fail, err:%v dsn:%v\n", err, dsn)
    }

    if db != nil{
        fmt.Println("open conn sucess")
    }

迁移表结构,并进行增删改查等数据库基础操作。

go
// 自动迁移表结构
    err = db.AutoMigrate(&User{})
    if err != nil {
        panic("failed to migrate table")
    }

    // 插入数据
    user := User{Name: "Jack", Age: 18}
    result := db.Create(&user)
    if result.Error != nil {
        panic("failed to create user")
    }

    // 查询用户
    var users []User
    result = db.Find(&users)
    if result.Error != nil {
        panic("failed to query users")
    }
    for _, user := range users {
        println(user.ID, user.Name, user.Age)
    }

    // 更新用户
    user.Name = "Tom"
    user.Age = 20
    result = db.Save(&user)
    if result.Error != nil {
        panic("failed to update user")
    }

    db.First(&user,users[0].ID)
    // 删除用户
    result = db.Delete(&user)
    if result.Error != nil {
        panic("failed to delete user")
    }

}

2.2.2 启动程序

在 demo 根目录下打开命令行工具,执行以下命令,启动程序:

cmd
go run demo.go

返回结果如下:

cmd
open conn sucess
1 Jack 18

三、常见问题&解决办法

在使用 GORM 连接 XuguDB 时,可能会遇到各种错误。以下列举一些常见的错误及其处理方法。

3.1 no required module provides package gorm.io/gorm/callbacks

应用没有安装 GORM 框架。

3.2 package xggorm is not in std (XXX\XXX\XXX)

方言包放置位置错误,需要放置在错误信息提示的目录下。

3.3 unknown driver "xugu" (forgotten import?)

XuguDB 驱动包未正确安装或导入。