Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


XORM 使用手册

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

XORM 是一个简单而强大的 Go 语言 ORM 框架,通过连写操作,可以通过很少的语句完成数据库操作。本文档将介绍 XuguDB 对 XORM 框架的适配情况,并简易描述使用 XORM 开发 XuguDB 应用的 Demo 指南。

框架名称适配起始版本官网地址源框架下载地址XuguDB框架下载demo程序地址
XORM1.3.1XORM官网-版本发布列表xugu-xorm

提示

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

一、方言包使用说明


方言压缩包解压,解压获取到的 xugu.go 文件放置到 XORM 框架的 dialects 中,路径通常为 go\pkg\mod\xorm.io\xorm@v1.3.1\dialects 。导入 xorm 包与 XuguDB Go 驱动包 ,使用 xorm.NewEngine 方法创建 XuguDB连接,进行应用开发。

go
// 导入 XORM 与 XuguDB Go 驱动
import (
    _ "gitee.com/XuguDB/go-xugu-driver"
    "xorm.io/xorm"
)

func main() {
    // 创建 XuguDB 连接,连接串与 Go 驱动格式一致。
    engine, err := xorm.NewEngine("xugu", "IP=192.168.2.216;DB=SYSTEM;User=SYSDBA;PWD=SYSDBA;Port=5138;char_set=utf8;")
    if err != nil {
        panic("Failed to connect to database: " + err.Error())
    }
    defer engine.Close()
}

二、连接示例程序

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

2.1 前提条件

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

2.2 操作步骤

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

导入 XuguDB Go 驱动

go
package main

import (
    "time"
    // 导入 XuguDB Go 驱动包
    _ "gitee.com/XuguDB/go-xugu-driver"
    "xorm.io/xorm"
    "fmt"
)

定义表模型。

go
// 定义模型
type User struct {
    Id      int64     `xorm:"pk autoincr"`
    Name    string    `xorm:"varchar(100)"`
    Age     int       `xorm:"int"`
    Created time.Time `xorm:"created"`
}

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

go
func main() {
    engine, err := xorm.NewEngine("xugu", "IP=192.168.2.216;DB=SYSTEM;User=SYSDBA;PWD=SYSDBA;Port=5138;char_set=utf8;")
    if err != nil {
        panic("Failed to connect to database: " + err.Error())
    }
    defer engine.Close()

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

go
    //同步结构体到数据库
    err = engine.Sync2(new(User))
    if err != nil {
        panic("Failed to sync database: " + err.Error())
    }
    user := User{
        Name: "张三",
        Age:  25,
    }

    affected, _ := engine.Insert(&user)
    fmt.Printf("插入ID: %d, 影响行数: %d\n", user.Id, affected)

    // ==== 查(Read)====
    // 单条查询
    var u1 User
    has, _ := engine.ID(user.Id).Get(&u1)
    fmt.Printf("查询结果: %+v, 是否存在: %t\n", u1, has)

    // 条件查询
    var u2 User
    has, err = engine.Where("name=?", "张三").Get(&u2)

    // 多条查询
    users := make([]User, 0)
    err = engine.Where("age > ?", 20).Find(&users)
    fmt.Printf("找到 %d 个用户\n", len(users))

    // ==== 改(Update)====
    // 更新单个字段
    affected, err = engine.ID(user.Id).Update(&User{Age: 30})
    fmt.Printf("更新影响行数: %d\n", affected)

    // 更新多个字段
    affected, err = engine.Table(new(User)).ID(user.Id).Update(map[string]interface{}{
        "name": "李四",
        "age":  35,
    })

    // ==== 删(Delete)====
    // 按ID删除
    affected, err = engine.ID(user.Id).Delete(&User{})
    fmt.Printf("删除影响行数: %d\n", affected)

    // 条件删除
    affected, err = engine.Where("age < ?", 18).Delete(&User{})
}

2.2.2 启动程序

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

cmd
go run demo.go

返回结果如下:

cmd
GetTables db.uri.DBName SYSTEM
插入ID: 1, 影响行数: 1
查询结果: {Id:1 Name:张三 Age:25 Created:2025-07-09 11:13:56 +0800 CST}, 是否存在: true
找到 1 个用户
更新影响行数: 1
删除影响行数: 1

三、常见问题&解决办法

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

3.1 panic: Failed to connect to database: unsupported driver name: xugu

方言包文件 xugu.go 没有正确放置到 XORM 的 dialects 目录下。

3.2 unsupported driver name: xugusql

引擎名称错误,正确名称为 xugu 。

3.3 unknown driver "xugu" (forgotten import?)

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