6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HRBrainAdvent Calendar 2024

Day 17

【Go】クエリビルダーとORMの違いを調べてみた

Last updated at Posted at 2024-12-16

はじめに

こんにちは、新卒でバックエンドエンジニアをしていますなかじです!

アドベントカレンダー17日目の記事です!

Go言語でデータベース操作を行う際に、主に使用されるツールには「クエリビルダー」と「ORM」があります。

自分自身、実際の違いを理解していなかったので、まとめてみようと思います!

この記事では、GoにおけるクエリビルダーとORMの違いについて、実例を使って解説している記事です!

クエリビルダーとORMの違い

クエリビルダー

SQLのクエリ文を生成するために用意された一連のメソッド。

クエリビルダーは、データベースに対するSQLクエリをコードで簡単に構築できるライブラリです。

goquの一例ですが、with句やサブクエリなどの複雑化したクエリなど、ある程度スマートにかけますよね!

sql, _, _ = goqu.From("derived").
	With("intermed", goqu.From("test").Select(goqu.Star()).Where(goqu.C("x").Gte(5))).
	With("derived", goqu.From("intermed").Select(goqu.Star()).Where(goqu.C("x").Lt(10))).
	Select(goqu.Star()).
	ToSQL()
fmt.Println(sql)



// 出力結果(見やすさのため改行)
WITH intermed AS (
    SELECT * FROM "test" 
    WHERE ("x" >= 5)
), 
derived AS (
    SELECT * FROM "intermed" 
    WHERE ("x" < 10)
) SELECT * FROM "derived"

ORM

ORMは、「Object-Relational Mapping」の略で、Goのオブジェクトとリレーショナルデータベースの対応関係を自動でマッピングすることができます!

なので、DBのスキーマを見て、自動でGoのオブジェクト型を生成してくれるものがあったり、クエリビルダーの機能以外にも機能があります!

SELECTなどのRead処理するときに、その結果を格納するために必要なGoのオブジェクト型を自動生成してくれるのは、すごくありがたいですよね!

gormを例に挙げると、クエリビルダー以外にも多くの機能がありそうですね!

  • Full-Featured ORM
  • Associations (Has One, Has Many, Belongs To, Many To Many, Polymorphism, Single-table inheritance)
  • Hooks (Before/After Create/Save/Update/Delete/Find)
  • Eager loading with Preload, Joins
  • Transactions, Nested Transactions, Save Point, RollbackTo to Saved Point
  • Context, Prepared Statement Mode, DryRun Mode
  • Batch Insert, FindInBatches, Find To Map
  • SQL Builder, Upsert, Locking, Optimizer/Index/Comment Hints, NamedArg, Search/Update/Create with SQL Expr
  • Composite Primary Key
  • Auto Migrations
  • Logger
  • Extendable, flexible plugin API: Database Resolver (Multiple Databases, Read/Write Splitting) / Prometheus…
  • Every feature comes with tests
  • Developer Friendly

ORMの機能にSQLクエリを組み立てるクエリビルダーの機能があり、内包されているイメージですね!

※ライブラリごとで、得意不得意あると思います!

goのクエリビルダー

調べると、Goで使用されるクエリビルダーのライブラリには以下があります。

goのORM

調べると、Goで使用されるORMライブラリには以下があります。

HRBrain内の現状のORMの採用状況を紹介(2024/12/17)

フューチャーさんのブログの項目を参考にして、HRBrain内の現状のORMの採用状況について、調べてみました!

現在、HRBrainでは以下ライブラリを使っています!

それぞれのチーム状況に応じた技術選定だと思うので、それぞれの良さがあり、あまり不満を聞いたことはないです!🙆

まとめ

浅い記事になってしまいましたが、クエリビルダーとORMの違いをざっと調べてみました!

それぞれのライブラリに特徴があって、すごくおもしろいなと感じました!

また、次回の記事でお会いしましょう!👋

参考

PR

株式会社HRBrainでは、一緒に働く仲間を募集しています!
興味を持っていただけた方はぜひ弊社の採用ページをご確認ください!

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?