XORM 使用手册
📄字数 2.1K
👁️阅读量 加载中...
XORM 是一个简单而强大的 Go 语言 ORM 框架,通过连写操作,可以通过很少的语句完成数据库操作。本文档将介绍 XuguDB 对 XORM 框架的适配情况,并简易描述使用 XORM 开发 XuguDB 应用的 Demo 指南。
框架名称 | 适配起始版本 | 官网地址 | 源框架下载地址 | XuguDB框架下载 | demo程序地址 |
---|---|---|---|---|---|
XORM | 1.3.1 | XORM官网 | - | 版本发布列表 | 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 驱动包未正确安装或导入。