sqlboiler:一个 Go ORM 工具

前言

今天看到了一个 Go ORM 工具 sqlboiler,项目地址在: https://github.com/volatiletech/sqlboiler

// Ultra complex query
users, err := models.Users(
  Select("id", "name"),
  InnerJoin("credit_cards c on c.user_id = users.id"),
  Where("age > ?", 30),
  AndIn("c.kind in ?", "visa", "mastercard"),
  Or("email like ?", `%aol.com%`),
  GroupBy("id", "name"),
  Having("count(c.id) > ?", 2),
  Limit(5),
  Offset(6),
).All(ctx, db)

初看 README 里实例感觉还不错,比起手动拼接字符串要高级上那么一点点。


image.png

下面的 benchmark 可以说是秒杀一众的 ORM 工具,是让人忍不住想试一下。

安装

文档中给出来的安装方法是:

go install github.com/volatiletech/sqlboiler/v4@latest
go install github.com/volatiletech/sqlboiler/v4/drivers/sqlboiler-psql@latest

它的drivers还有 sqlboiler-mysql 、 sqlboiler-sqlite3、 sqlboiler-mssql 。安装哪个取决于你要用什么数据库,当然也可以全部安装上。

使用

与 gorm 等其它 orm 工具不同,sqlboiler 可以说是一个代码生成工具,它根据数据库中已经存在的表,生成对应的 ORM 代码。
因此,要使用 sqlboiler 生成 ORM 相关的代码,必须先建好数据库,然后在项目的根目录写上一个配置文件 sqlboiler.toml,把数据库的连接方式、数据表到结构体名字转换、字段类型转换等信息告诉它。文件的示例:

[mysql]
dbname = "testdb"
host = "localhost"
port = 3306
user = "root"
pass = ""
sslmode = "false"
output = "models"
pkgname = "models"

[[aliases.tables]]
name          = "team_names"
up_plural     = "TeamNames"
up_singular   = "TeamName"
down_plural   = "teamNames"
down_singular = "teamName"

  [[aliases.tables.columns]]
  name  = "team_name"
  alias = "OurTeamName"

  [[aliases.tables.relationships]]
  name    = "fk_video_id"
  local   = "Rags"
  foreign = "Videos"

然后再运行 sqlboiler 命令就可以生成出模型的代码。类似如下文件:


image.png

初次使用感受

和大包大揽的 gorm 不同,sqlboiler 不负责数据表的创建、升级,因此需要额外代码维护,或者有专门的dba来做相关工作。
另外文档中明确说了,缺少多列外键、视图的支持,对很多场景可能不实用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容