gorose-最风骚的golang orm
lemote 2019-08-21 16:58:59 Go语言orm  收藏
5 / 509

gorose, 最风骚的 go orm, 拥有链式操作, 开箱即用, 一分钟上手等八大风骚, 让 golang 操作数据库成为一种享受, 妈妈再也看不到我处理数据的痛苦了, 下面就让我一一讲解 gorose 的风情

风骚一 : 开箱即用, 一分钟上手

db,_ := gorose.Open("xxxxxx这里是配置文件中的数据库配置")

db.Query("select * from user")  // 原生sql执行, 返回格式化后的结果

风骚二 : 链式操作, 尽显妩媚之姿

db.Table("user").First()
get sql : select * from user where id=1

风骚三 : 直接查询想要的字段, 无需预先声明字段类型

db.Table("user").Fields("id as uid,name").Where("id", ">", 1).Get()

同时支持传入 struct 查询

type userInfo struct {
    Name string `orm:"name"`
}
var user userInfo
var users []userInfo
db.Table(&user).Select()
db.Table(&users).Limit(10).Select()

风骚四 : 无感知读写分离集群, 连接池支持

var DbConfigSalve = &gorose.DbConfigSingle{
    Driver:          "mysql",                    // 驱动: mysql/sqlite/oracle/mssql/postgres
    EnableQueryLog:  false,                      // 是否开启sql日志
    SetMaxOpenConns: 0,                          // (连接池)最大打开的连接数,默认值为0表示不限制
    SetMaxIdleConns: 0,                          // (连接池)闲置的连接数
    Prefix:          "",                         // 表前缀
    Dsn:             "root:root(localhost:3306)/test?charset=utf8", // 数据库链接
}
// 主库配置
var DbConfigMaster = &gorose.DbConfigSingle{
    Driver:          "mysql",                    // 驱动: mysql/sqlite/oracle/mssql/postgres
    EnableQueryLog:  true,                       // 是否开启sql日志
    SetMaxOpenConns: 0,                          // (连接池)最大打开的连接数,默认值为0表示不限制
    SetMaxIdleConns: 0,                          // (连接池)闲置的连接数
    Prefix:          "",                         // 表前缀
    Dsn:             "root:root(localhost:3306)/test?charset=utf8", // 数据库链接
}
// 集群配置,一主多从, 可以放入很多个从库配置
var DbConfCluster = &gorose.DbConfigCluster{
    Master: DbConfigMaster,
    Slave:  []*gorose.DbConfigSingle{
        DbConfigSalve,
    },
}

风骚五 : 一键处理事务, 全自动 启动 / 回滚 / 提交 事务, 我只需专注于代码本身

db.Transaction(func(){
    db.Table("user").Data(map[string]interface{}{"name":"fizz"}).Insert()
    db.Table("user").Data(map[string]interface{}{"name":"fizz2"}).Where("id",1).Update()
})

风骚六 : 聚合查询, 常规查询等, 统统一行搞定

user := db.Table("users")
user.Count()
user.Where("id","<", 10).Get()
user.Where("len(name)>5").First()

风骚七 : 大量数据自动分块处理, 我还是只需要专注于代码本身

user 表中的所有数据, 我每次取出 100 条, 然后处理完, 自动取下一个 100 条, 继续处理, 如此反复, 直到处理完指定条件的数据

db.Table("users").Fields("id, name").Where("id", ">", 2).Chunk(100, func(data []map[string]interface{}) {
        fmt.Println(data)
        for _, item := range data {
            fmt.Println(item["id"], item["name"])
        }
    })

风骚八 : 复杂嵌套 where 查询, 只需要一个简单的闭包搞定

user, err := Users.Where("id", ">", 1).Where(func() {
        Users.Where("name", "fizz").OrWhere(func() {
            Users.Where("name", "fizz2").Where(func() {
                Users.Where("name", "fizz3").OrWhere("website", "fizzday")
            })
        })
    }).Where("job", "it").First()

  • 搁浅~ 2019-08-21 16:58:59 回复
    liuxiaojin93 2019-08-21 16:54:56

    很方便

    我还是喜欢 gorm。

  • liuxiaojin93 2019-08-21 16:54:56 回复

    很方便

  • 搁浅~ 2019-08-08 15:25:29 回复
    lemote 2019-08-08 15:23:07

    你觉着怎么样,这个 orm

    没实际上使用过, 看 api 设计还挺友好的。 我最早接触的是 gorm,所以一直用 gorm,有机会试一下 gorose。

  • lemote 2019-08-08 15:23:07 回复
    搁浅~ 2019-08-08 15:19:58

    mark, 我很早就关注这个了。

    你觉着怎么样,这个 orm

  • 搁浅~ 2019-08-08 15:19:58 回复

    mark, 我很早就关注这个了。