xorm 与 gorm 对比

xorm 与 gorm 对比

Posted by 锐玩道 on May 21, 2021

如果❤️我的文章有帮助,欢迎点赞、关注。这是对我继续技术创作最大的鼓励。更多往期文章在我的个人博客

在学习xorm的时候,把gormxorm搞混了傻傻分不清楚,虽然二者都是Go语言的ORM库,但还是有不同的差别特意做了下区分

gorm

项目文档

  • gorm github: https://github.com/jinzhu/gorm star:285 最近更新:16月前
  • gorm 官网: https://gorm.io/
  • gorm 文档: https://gorm.io/docs/

功能

1、hook机制(Before/After Create/Save/Updaye/Delete/Find) 2、对象关系Has One,Has Many,Belongs To,Many To Many,Polymorphism 3、热加载 4、支持原生sql在这里插入代码片 5、支持事务:在创建,更新,查询,删除时将被调用,如果任何回调返回错误,gorm将停止未来操作并回滚所有更改。 6、链式api 7、支持的数据库有:mysql、postgre、sqlite、sqlserver 8、内置日志记录器

Gorm有内置的日志记录器支持,默认情况下,它会打印发生的错误

// 启用Logger,显示详细日志
db.LogMode(true)

// 禁用日志记录器,不显示任何日志
db.LogMode(false)

// 调试单个操作,显示此操作的详细日志
db.Debug().Where("name = ?", "jinzhu").First(&User{})

xorm

项目文档

  • xorm github: https://github.com/go-xorm/xorm star:6.3k 最近更新:2年前
  • xorm 官网: https://xorm.io/zh/
  • xorm 文档: https://gobook.io/

功能

  • 支持的数据库有:Mysql、MyMysql、Postgre、SQlite、Mssql
  • 支持事务:当使用事务处理时,需要创建Session对象
  • 链式api
  • 支持原始SQL语句和ORM操作的混合执行
  • 查询缓存
  • xorm内置了一致性缓存支持,不过默认并没有开启。要开启缓存,需要在engine创建完后进行配置,如: 启用一个全局的内存缓存
    cacher := xorm.NewLRUCacher(xorm.NewMemoryStore(), 1000)
    engine.SetDefaultCacher(cacher)
    
  • 可根据数据库反转生成代码,即根据数据库自动生成xorm的结构体
  • 级联加载
  • 提供sql语句日志输出
  • 支持批量查询处理
  • 自动化的读写分离/主从式
  • 链式api
    has, err := engine.Where("name = ?", name).Desc("id").Get(&user)
    err := engine.Where(builder.NotIn("a", 1, 2).And(builder.In("b", "c", "d", "e"))).Find(&users)
    
  • 自动化的读写分离/主从式
    dataSourceNameSlice := []string{masterDataSourceName, slave1DataSourceName, slave2DataSourceName}
    engineGroup, err := xorm.NewEngineGroup(driverName, dataSourceNameSlice)