ホームページ  >  記事  >  バックエンド開発  >  golangでormを実装する方法

golangでormを実装する方法

PHPz
PHPzオリジナル
2023-04-11 09:14:07658ブラウズ

インターネット技術の発展とアプリケーションシナリオの継続的な拡大に伴い、データベースは情報の保存と送信の中核として、さまざまな業界でのアプリケーション実装の重要な部分になっています。 ORM(Object Relational Mapping)技術は、優れたデータベースアプリケーション管理技術として、さまざまな分野で広く活用されています。この記事では、golang での ORM の実装に焦点を当てます。

1. ORM とは

ORM テクノロジ、つまりオブジェクト リレーショナル マッピングとは、開発者が記述することなく、データベース内のデータをビジネス ロジック コードで操作できるオブジェクトに変換することを指します。関連する SQL ステートメント自体。 ORM テクノロジの利点は、開発者のワークロードを簡素化し、プロジェクト開発効率を向上させ、SQL インジェクションなどの一般的な問題を回避できることです。

2. golang で ORM を実装する方法

近年、Web 開発では言語 golang の人気が高まっています。同時に、golang はアプリケーションのさまざまなニーズを満たす優れた ORM フレームワークも提供します。

  1. GORM

GORM は golang で人気のある ORM フレームワークであり、CRUD、関連クエリ、トランザクションなどの機能を提供します。 MySQL、PostgreSQL、SQLiteなどのさまざまなデータベースをサポートしており、データベースの自動移行機能も備えているのが特長です。

以下は、GORM を使用して MySQL データベースを操作するための簡単なコード例です。

import "gorm.io/gorm"
import "gorm.io/driver/mysql"
// 定义一个User对象
type User struct {
  gorm.Model
  Name string
  Age  uint
}

func main() {
  // 连接MySQL,并创建表
  dsn := "user:password@tcp(127.0.0.1:3306)/gorm_db?charset=utf8mb4&parseTime=True&loc=Local" // 数据库连接字符串
  db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
  if err != nil {
    panic("failed to connect database")
  }

  // 迁移schema
  db.AutoMigrate(&User{})

  // 创建一个User对象
  user := User{Name: "Jack", Age: 18}

  // 添加记录
  db.Create(&user)
  
  // 查询记录
  var u User
  db.First(&u, "name = ?", "Jack")
  
  // 更新记录
  db.Model(&u).Update("Age", 20)
  
  // 删除记录
  db.Delete(&u)
}

上記のコードからわかるように、GORM は、次のようなシンプルで使いやすいメソッドを提供します。データベースの操作に適しており、複雑な関連クエリに適しており、対応するメソッドも提供されています。

  1. XORM

XORM も golang の優れた ORM フレームワークであり、機能的には GORM と大きな違いはありません。 MySQL、PostgreSQL、SQLite、MSSQL などのさまざまなデータベースをサポートしており、パフォーマンスの面でも非常に優れています。

XORM を使用して MySQL データベースを操作するための簡単なサンプル コードは次のとおりです。

import (
  _ "github.com/go-sql-driver/mysql"
  "github.com/go-xorm/xorm"
  "log"
)

// 定义一个User对象
type User struct {
  Id   int    `xorm:"pk autoincr"`
  Name string `xorm:"varchar(25)"`
  Age  int
}

func main() {
  // 连接MySQL,并创建表
  engine, err := xorm.NewEngine("mysql", "root:password@tcp(127.0.0.1:3306)/test_db?charset=utf8")
  if err != nil {
    log.Fatal(err)
  }

  // 迁移schema
  if err := engine.Sync2(new(User)); err != nil {
    log.Fatal(err)
  }

  // 创建一个User对象
  user := &User{Name: "Jack", Age: 18}

  // 添加记录
  if _, err := engine.Insert(user); err != nil {
    log.Fatal(err)
  }
  
  // 查询记录
  u := &User{}
  if has, err := engine.Where("name = ?", "Jack").Get(u); err != nil {
    log.Fatal(err)
  } else if !has {
    log.Fatal("Record not exists")
  }
  
  // 更新记录
  u.Age = 20
  if _, err := engine.Update(u); err != nil {
    log.Fatal(err)
  }
  
  // 删除记录
  if _, err := engine.Delete(u); err != nil {
    log.Fatal(err)
  }
}

上記のコードを通じて、XORM が対応する CRUD 操作も提供していることがわかります。とてもシンプルです。

3. まとめ

Golang では、ORM フレームワークのさまざまな実装方法が存在します。アプリケーション シナリオに高いパフォーマンス要件がある場合は、XORM が適していますが、複数のデータベースをサポートする必要があり、ORM フレームワークに高い拡張性が必要な場合は、間違いなく GORM が適しています。アプリケーション シナリオに合った ORM フレームワークを選択すると、ビジネス コード開発の効率が大幅に向上し、開発コストを節約できます。

以上がgolangでormを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。