golang の ORM (オブジェクト リレーショナル マッピング) に関しては、gorm が一般的に使用されるフレームワークです。ここでは、gorm でのモデル定義とタグの使用法を調べます。
- モデルの定義
gorm では、モデル定義はデータベース テーブルと golang 構造の間のマッピング関係を表します。基本的に、各データベース テーブルは golang 構造に対応します。
サンプルコードは次のとおりです。
type User struct {
gorm.Model
Name string
Age int
}
この例では、User という名前の構造体を定義し、それと gorm.Model の間の関係を指定します。gorm.Model には、いくつかのデフォルト フィールド (ID、CreatedAt、UpdatedAt、および DeletedAt) といくつかのメソッド (BeforeCreate、BeforeUpdate など) が含まれています。
- タグの使用
タグとは、データの種類を説明するために追加されるメタ情報です。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 フィールドも定義します。
- と併せて
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 構造間のマッピング関係を簡単に完成させることができ、データベース操作の自動移行、追加、削除、変更、クエリをサポートします。