すべてのプロダクト
Search
ドキュメントセンター

Lindorm:GORM ライブラリを使用してアプリケーションを開発する

最終更新日:Mar 24, 2025

このトピックでは、GORM ライブラリを使用して LindormTable に接続し、使用する手順について説明します。

前提条件

手順

  1. Go プロジェクトの go.mode ファイルに、GORM の依存関係を追加します。

    require (
        gorm.io/driver/mysql v1.5.1
        gorm.io/gorm v1.25.4
    )
  2. 接続パラメータを設定します。

    dsn := "<user>:<password>@tcp(<lidnorm_mysql_url>:33060)/<database>"

    パラメータ

    password

    パラメータ

    説明

    user

    パスワードを忘れた場合は、LindormTable のクラスタ管理システムでパスワードを変更できます。 詳細については、ユーザーの管理をご参照ください。

    LindormTable にアクセスするために使用するパスワード。

    lindorm_mysql_url

    [lindormtable エンドポイント(mysql 用)]。エンドポイントの取得方法については、[エンドポイントの表示] をご参照ください。

    重要
    • アプリケーションが ECS インスタンスにデプロイされている場合は、セキュリティを強化し、ネットワークレイテンシを低減するために、VPC を使用して Lindorm インスタンスに接続することをお勧めします。

    • アプリケーションがローカルサーバーにデプロイされていて、インターネット経由で Lindorm インスタンスに接続する必要がある場合は、Lindorm コンソールでインスタンスのインターネットエンドポイントを有効にするために、次の手順を実行できます。左側のナビゲーションペインで、[データベース接続] > [ワイドテーブルエンジン] を選択します。[ワイドテーブルエンジン] タブで、[パブリックエンドポイントを有効にする] をクリックします。

    • VPC を使用して Lindorm インスタンスにアクセスする場合は、lindorm_mysql_url の値に [lindormtable VPC エンドポイント For Mysql] を指定します。インターネットを使用して Lindorm インスタンスにアクセスする場合は、lindorm_mysql_url の値に [lindormtable インターネットエンドポイント For Mysql] を指定します。

    database

    接続先のデータベースの名前。 デフォルトでは、クライアントは default という名前のデータベースに接続されます。

  3. 接続を確立し、LindormTable SQL を使用して LindormTable で操作を実行します。 次のコードブロックは、LindormTable SQL を使用してテーブルを作成する方法の例を示しています。

    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic(err)
    }
    // 注意: LindormTable はトランザクションをサポートしていないため、トランザクションを無効にします。
    session := db.Session(&gorm.Session{SkipDefaultTransaction: true})
    
    // Product という名前のテーブルを作成します。
    err = session.Migrator().CreateTable(&Product{})
    if err != nil {
        panic(err)
    }

サンプルコード

次のコードは、GORM ライブラリを使用して LindormTable に接続し、使用する方法の完全な例を示しています。

package main

import (
    "fmt"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)

// テーブルのフィールドと GORM の対応する要素間のマッピング関係を定義します。
type Product struct {
    // ID 列をプライマリキーとして指定します。 LindormTable では自動インクリメントがサポートされていないため、自動インクリメントを false に設定します。
    ID    int64  `gorm:"primaryKey;autoIncrement:false"`
    // 文字列データ型を GORM の varchar にマップします。 そうしないと、longtext データ型は列でサポートされません。
    Code  string `gorm:"type:varchar"`
    Price float64
}

func main() {
    // user を LindormTable にアクセスするために使用するユーザー名に設定します。
    // password を LindormTable にアクセスするために使用するパスワードに設定します。
    // lindorm_mysql_url を MySQL 用の LindormTable エンドポイントに設定します。
    // database を接続先のデータベースに設定します。
    dsn := "user:test@tcp(ld-uf6k8yqb741t3****-proxy-sql-lindorm.lindorm.rds.aliyuncs.com:33060)/default"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic(err)
    }
    // 注意: LindormTable はトランザクションをサポートしていないため、トランザクションを無効にします。
    session := db.Session(&gorm.Session{SkipDefaultTransaction: true})

    // テーブルを作成します。
    err = session.Migrator().CreateTable(&Product{})
    if err != nil {
        panic(err)
    }

    // ID 列の値が 1 のデータ行をテーブルに書き込みます。
    tx := session.Debug().Create(&Product{ID: 1, Code: "D42", Price: 100.1})
    err = tx.Error
    if err != nil {
        panic(err)
    }

    // ID 列の値が 2 のデータ行をテーブルに書き込みます。
    tx = session.Debug().Create(&Product{ID: 2, Code: "B41", Price: 105.5})
    err = tx.Error
    if err != nil {
        panic(err)
    }

    var product1 Product
    // ID 列の値が 1 のデータをクエリします。
    session.Debug().First(&product1, 1) // プライマリキーの値が 1 のデータをクエリします。
    fmt.Println(product1)

    var product2 Product
    // ID 列の値が 2 のデータをクエリします。
    session.Debug().First(&product2, "code = ?", "B41") // Code 列の値が B41 のデータをクエリします。
    fmt.Println(product2)


    // ID 列の値が 1 のデータで、Price 列の値を 101.8 に更新します。
    session.Debug().Model(&Product{}).Where("id = ?", 1).Update("price", 101.8)
    product1 = Product{}

    // プライマリキー値が 1 のデータをクエリします。
    session.Debug().First(&product1, 1)
    fmt.Println(product1)

    // プライマリキー値が 1 のデータの値を削除します。
    session.Delete(&Product{}, 1)
    product1 = Product{}
    session.Debug().First(&product1, 1)
    fmt.Println(product1)
}

上記のコードを実行すると、次のクエリ結果を含むログが返されます。

{1 D42 100.1}
{2 B41 105.5}
{1 D42 101.8}
{0  0}