Golang中类似C# LINQ的ORM框架有哪些

Golang中类似C# LINQ的ORM框架有哪些 我提议一个新的ORM,它为Where()方法提供了lambda表达式支持。

请查看。

GitHub

GitHub - bbitere/atomicsql_golang: 为Golang实现的ORM库,包含Where()和Select()的lambda表达式…

为Golang实现的ORM库,包含Where()和Select()的lambda表达式 - GitHub - bbitere/atomicsql_golang: 为Golang实现的ORM库,包含Where()和Select()的lambda表达式…


更多关于Golang中类似C# LINQ的ORM框架有哪些的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang中类似C# LINQ的ORM框架有哪些的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang中实现类似C# LINQ的ORM框架,主要有以下几个选择:

  1. GORM - 最流行的ORM,支持链式调用和部分lambda风格查询
  2. XORM - 性能较好的ORM,支持Builder模式
  3. ent - Facebook开源的实体框架,有类型安全的查询
  4. sqlc - 从SQL生成类型安全代码,不是传统ORM
  5. go-queryset - 基于GORM的查询生成器

你提到的atomicsql_golang项目确实提供了lambda表达式支持,这是一个有趣的实现。以下是示例代码:

// 使用atomicsql_golang的lambda表达式示例
var users []User
err := db.Model(&User{}).
    Where(func(u *User) bool {
        return u.Age > 18 && u.Name == "John"
    }).
    Select(func(u *User) any {
        return []any{u.ID, u.Name}
    }).
    Find(&users)
// GORM的类似实现
var users []User
err := db.Where("age > ? AND name = ?", 18, "John").
    Select("id, name").
    Find(&users).Error

// 或者使用结构体条件
err := db.Where(&User{Age: 18, Name: "John"}).
    Select([]string{"id", "name"}).
    Find(&users).Error
// ent框架的类型安全查询示例
users, err := client.User.
    Query().
    Where(user.AgeGT(18), user.NameEQ("John")).
    Select(user.FieldID, user.FieldName).
    All(ctx)

atomicsql_golang的lambda表达式方式确实更接近C# LINQ的语法风格,但需要注意性能影响,因为Go的lambda表达式在每次调用时都会创建闭包。对于需要高性能的场景,传统的SQL构建器模式可能更合适。

目前Golang生态中还没有完全等同于C# LINQ的ORM实现,但上述框架都在不同程度上提供了类似的功能。atomicsql_golang在语法相似性方面做了有价值的尝试。

回到顶部