xorm

1.引擎

XORM支持两种 ORM 引擎,即 Engine 引擎和 Engine Group 引擎
一个 Engine 引擎用于对单个数据库进行操作,一个 Engine Group 引擎用于对读写分离的数据库或者负载均衡的数据库进行操作。Engine 引擎和 EngineGroup 引擎的API基本相同,所有适用于 Engine 的API基本上都适用于 EngineGroup

1.1 单引擎

engine是GoRoutine安全的,一个引擎对应一个数据库

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/go-xorm/xorm"
	_ "github.com/lib/pq"
)

var engine *xorm.Engine
func main() {
    // 创建engine
	var err error
	engine, err = xorm.NewEngine("postgres", "postgres://username:password@dev@ip:5432/databaseName?sslmode=disable&search_path=schemaName")
	if err != nil {
		fmt.Print(err)
	}

	// 延迟关闭数据库连接
	defer engine.Close()
}

2.日志

	// 打印SQL语句
	engine.ShowSQL(true)

3.表结构

3.1 表定义

// TableName 定义 table_name表的结构体
type TableName struct {
	Id     string `xorm:"not null"`
	Name   string `xorm:"not null"`
}

3.2 字段属性

xorm:"varchar(25) notnull unique 'usr_name' comment('姓名')"

3.3 数据库信息

	// 获取所有表的元数据信息
	dbMetas, err := engine.DBMetas()
	if err != nil {
		fmt.Println("Failed to get DBMetas:", err)
		return
	}

	// 遍历并打印每个表的元数据信息
	for _, dbMeta := range dbMetas {
		fmt.Printf("Table Name: %s\n", dbMeta.Name)
		fmt.Println("Columns:")
		for _, col := range dbMeta.Columns() {
			fmt.Printf("  - Name: %s, Type: %s, Nullable: %v, Primary Key: %v\n", col.Name, col.SQLType.Name, col.Nullable, col.IsPrimaryKey)
		}
		fmt.Println("Indexes:")
		for _, index := range dbMeta.Indexes {
			fmt.Printf("  - Name: %s, Type: %s, Columns: %v\n", index.Name, index.Type, index.Cols)
		}
		fmt.Println("--------------------------------------------------")
	}

4. 增

	// 插入数据
	config := &TableName{
		Id:     "123321",
		Module: "moduleTest",
		Type:   "TypeTest",
		Lang:   "zh_Ch",
	}
	inserted, err := engine.Insert(config)
	if err != nil {
		fmt.Println("Failed to insert data:", err)
		return
	}
	fmt.Printf("Inserted %d record(s)\n", inserted)

5. 删

// 删除数据
	affected, err := engine.ID(config.Id).Delete(config)
	if err != nil {
		fmt.Println("Failed to delete data:", err)
		return
	}
	fmt.Printf("Deleted %d record(s)\n", affected)

6. 改

	//更新数据
	config.Module = "Hello, World!"
	affected, err := engine.ID(config.Id).Update(config)
	if err != nil {
		fmt.Println("Failed to update data:", err)
		return
	}
	fmt.Printf("Updated %d record(s)\n", affected)

7. 查

	// 查询数据
	var configs []CrmLangConfig
	err = engine.Find(&configs)
	if err != nil {
		fmt.Println("Failed to query data:", err)
		return
	}
	fmt.Println("Query Results:")
	for _, cfg := range configs {
		fmt.Printf(cfg.Module)
	}
posted @   lwx_R  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示