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() {// 创建enginevar err errorengine, 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 []CrmLangConfigerr = 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)}