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)
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律