Golang エンジニアリング コンポーネント オブジェクト リレーショナル マッピング gorm のモデルとタグの使用

golang の ORM (オブジェクト リレーショナル マッピング) に関しては、gorm が一般的に使用されるフレームワークです。ここでは、gorm でのモデル定義とタグの使用法を調べます。

  1. モデルの定義

gorm では、モデル定義はデータベース テーブルと golang 構造の間のマッピング関係を表します。基本的に、各データベース テーブルは golang 構造に対応します。

サンプルコードは次のとおりです。

type User struct {
    gorm.Model
    Name string
    Age  int
}

この例では、User という名前の構造体を定義し、それと gorm.Model の間の関係を指定します。gorm.Model には、いくつかのデフォルト フィールド (ID、CreatedAt、UpdatedAt、および DeletedAt) といくつかのメソッド (BeforeCreate、BeforeUpdate など) が含まれています。

  1. タグの使用

タグとは、データの種類を説明するために追加されるメタ情報です。ORM フレームワークでは、通常、データベースの列に対応するフィールドの情報を記述するためにタグが使用されます。gorm では、タグを使用してテーブル名、列名、制約、その他の情報をカスタマイズできます。

一般的なタグをいくつか示します。

  • column: カラム名を指定します。
  • type: データ型を指定します。
  • not null: 空でないことを指定します。
  • unique: 一意性制約を指定します。
  • default:デフォルト値を指定します。
  • primary_key: 主キーを指定します。
  • auto_increment:自己成長を指定します。

例は次のとおりです。

type Product struct {
    ID          uint   `gorm:"primaryKey"`
    Code        string `gorm:"uniqueIndex"`
    Price       uint
}

この例では、ID、コード、および価格フィールドを含む Product 構造を定義します。また、タグを主キーとして、コードを一意のインデックスとして持つ ID フィールドも定義します。

  1. と併せて

gormではModel定義とタグを組み合わせることで、より柔軟なORMマッピングを実現できます。完全な例を次に示します。

type Product struct {
    gorm.Model
    Code  string `gorm:"uniqueIndex"`
    Price uint
}

func main() {
    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
    if err != nil {
        panic("failed to connect database")
    }

    // 自动迁移 schema
    db.AutoMigrate(&Product{})

    // 创建记录
    db.Create(&Product{Code: "D42", Price: 100})

    // 查询单个记录
    var product Product
    db.First(&product, "code = ?", "D42")

    // 更新记录 - 将product的price更新为200
    db.Model(&product).Update("Price", 200)

    // 删除记录 - 删除product
    db.Delete(&product, 1)
}

この例では、gorm を使用してテーブル内のデータを作成、クエリ、更新、削除する方法を示します。コード内のモデル定義はテーブル名とデフォルトのフィールドを指定し、タグは列名と制約情報をカスタマイズするために使用されます。

要約する

golang では、gorm は強力で柔軟な ORM フレームワークを提供します。モデル定義とタグの組み合わせにより、データベース テーブルと golang 構造間のマッピング関係を簡単に完成させることができ、データベース操作の自動移行、追加、削除、変更、クエリをサポートします。

おすすめ

転載: blog.csdn.net/SMILY12138/article/details/130927843
おすすめ