如果❤️我的文章有帮助,欢迎点赞、关注。这是对我继续技术创作最大的鼓励。更多往期文章在我的个人博客
在学习xorm
的时候,把gorm
和xorm
搞混了傻傻分不清楚,虽然二者都是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)