Go语言使用xorm框架操作数据库

Xorm一个简单而强大的Go语言ORM(对象关系映射)库。它支持自动结构映射数据库表,并提供了一系列便捷的API来执行CRUD(创建读取更新删除操作

安装 Xorm

首先,你需要使用go get命令安装Xorm数据库驱动(以MySQL为例):

go get xorm.io/xorm
go get github.com/go-sql-driver/mysql

初始化 Xorm 引擎

使用Xorm,你需要初始化一个引擎(Engine)。引擎是Xorm操作数据库的主要入口。

import (
	"xorm.io/xorm"
	_ "github.com/go-sql-driver/mysql"
)

func initXORMEngine() (*xorm.Engine, error) {
	engine, err := xorm.NewEngine("mysql", "user:password@tcp(host:port)/dbname?charset=utf8")
	if err != nil {
		return nil, err
	}
	return engine, nil
}

这里我们通过xorm.NewEngine函数创建了一个新的引擎实例mysql数据库类型,后面的字符串数据库的DSN(数据源名称),包括用户名密码地址端口数据库名称

定义结构映射

Xorm 使用结构体的字段映射数据表中的列。你需要定义数据库表对应的结构体:

type User struct {
	Id   int64  `xorm:"'id' pk autoincr"`
	Name string `xorm:"'name'"`
	Age  int    `xorm:"'age'"`
}

// TableName 返回数据库中对应的表名
func (User) TableName() string {
	return "users"
}

上述代码中,User结构体映射到users表。xorm标签用于指定列名,pk表示主键autoincr表示自增

CRUD 操作

以下是基本的CRUD操作示例

创建(Create)
user := User{Name: "Alice", Age: 25}
affected, err := engine.Insert(&user)

使用Insert方法插入记录。如果操作成功affected返回影响行数

读取(Read
var user User
has, err := engine.ID(1).Get(&user)

使用Get方法根据主键查询记录。如果找到记录has将为true

更新(Update
user.Name = "Bob"
affected, err := engine.ID(user.Id).Update(&user)

使用Update方法更新记录。你需要指定ID来更新特定的记录。

删除(Delete)
affected, err := engine.ID(1).Delete(&User{})

使用Delete方法删除记录。同样,你需要指定ID来删除特定的记录。

连接查询

如之前所述,可以使用Join方法进行连接查询这里是一个查询用户他们订单示例

type Order struct {
	OrderId     int64 `xorm:"'order_id'"`
	UserId      int64 `xorm:"'user_id'"`
	OrderNumber string
}

type UserWithOrders struct {
	User  `xorm:"extends"`
	Order `xorm:"extends"`
}

var userWithOrders []UserWithOrders
err := engine.Table("user").Join("INNER", "order", "user.id = order.user_id").Find(&userWithOrders)

这个例子中,我们定义Order结构体和UserWithOrders结构体,后者嵌套UserOrder结构体,并使用了extends关键字然后我们使用Table方法选择user表作为主表,并通过Join方法order表进行内连接最后使用Find方法获取所有匹配的记录。

示例二

// GetDigitalPersonsByUserID 函数,根据用户ID查询对应的数字人ID和名字
func GetDigitalPersonsByUserID(userID int64) ([]DigitalPerson, error) {
	var digitalPersons []DigitalPerson
	err := datasource.Engine.Table("digital_person").Join("INNER", "conversation", "digital_person.id = conversation.dp_id").
		Where("conversation.uid = ?", userID).
		Select("digital_person.id, digital_person.name,digital_person.gender").
		Find(&digitalPersons)
	if err != nil {
		return nil, err
	}
	return digitalPersons, nil
}

注意事项

以上就是Xorm的基本用法说明和示例。在实际应用中,你可能还需要根据具体需求使用Xorm的其他高级功能

原文地址:https://blog.csdn.net/m0_46168848/article/details/134807069

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_47998.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注