添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Raw SQL

Performance を参照してください。

名前付き引数

sql.NamedArg map[string]interface{}{} 、構造体を使用した名前付き引数をサポートしています。例:

db.Where("name1 = @name OR name2 = @name", sql.Named("name", "jinzhu")).Find(&user)
// SELECT * FROM `users` WHERE name1 = "jinzhu" OR name2 = "jinzhu"

db.Where("name1 = @name OR name2 = @name", map[string]interface{}{"name": "jinzhu2"}).First(&result3)
// SELECT * FROM `users` WHERE name1 = "jinzhu2" OR name2 = "jinzhu2" ORDER BY `users`.`id` LIMIT 1

// Named Argument with Raw SQL
db.Raw("SELECT * FROM users WHERE name1 = @name OR name2 = @name2 OR name3 = @name",
sql.Named("name", "jinzhu1"), sql.Named("name2", "jinzhu2")).Find(&user)
// SELECT * FROM users WHERE name1 = "jinzhu1" OR name2 = "jinzhu2" OR name3 = "jinzhu1"

db.Exec("UPDATE users SET name1 = @name, name2 = @name2, name3 = @name",
sql.Named("name", "jinzhunew"), sql.Named("name2", "jinzhunew2"))
// UPDATE users SET name1 = "jinzhunew", name2 = "jinzhunew2", name3 = "jinzhunew"

db.Raw("SELECT * FROM users WHERE (name1 = @name AND name3 = @name) AND name2 = @name2",
map[string]interface{}{"name": "jinzhu", "name2": "jinzhu2"}).Find(&user)
// SELECT * FROM users WHERE (name1 = "jinzhu" AND name3 = "jinzhu") AND name2 = "jinzhu2"

type NamedArgument struct {
Name string
Name2 string
}

db.Raw("SELECT * FROM users WHERE (name1 = @Name AND name3 = @Name) AND name2 = @Name2",
NamedArgument{Name: "jinzhu", Name2: "jinzhu2"}).Find(&user)
// SELECT * FROM users WHERE (name1 = "jinzhu" AND name3 = "jinzhu") AND name2 = "jinzhu2"

DryRun Mode

Session を確認してください。

stmt := db.Session(&gorm.Session{DryRun: true}).First(&user, 1).Statement
stmt.SQL.String() //=> SELECT * FROM `users` WHERE `id` = $1 ORDER BY `id`
stmt.Vars //=> []interface{}{1}

ToSQL

Row & Rows

FindInBatches を参照してください。また、複雑なSQLクエリの構築方法については、 Group Conditions を参照してください。

*sql.Rows を構造体へ Scan

Connection

高度な機能

Clauses

Interface を実装する必要があります。

詳細については examples を参照してください。

Clause Builder

Limit を参照してみるとよいでしょう。

Clause Options

多くのClauses を定義しています。いくつかのClausesは高度なオプションを提供し、アプリケーションで使用することができます。

ほとんど使われることはないかもしれませんが、もしGORMのAPIがアプリケーションの要求にマッチしない場合は、それらを調べてみてもよいでしょう。例:

db.Clauses(clause.Insert{Modifier: "IGNORE"}).Create(&user)
// INSERT IGNORE INTO users (name,age...) VALUES ("jinzhu",18...);

StatementModifier

StatementModifier インターフェイスを提供しており、これを利用することでアプリケーションの要求に合うようにstatementを修正することが可能になります。例として Hints を参照するとよいでしょう。

import "gorm.io/hints"

db.Clauses(hints.New("hint")).Find(&User{})
// SELECT * /*+ hint */ FROM `users`
Getting Started 概要 モデルを宣言する データベースに接続する CRUD Interface レコードの作成 レコードの取得 高度なクエリ レコードの更新 レコードの削除 Raw SQL & SQL Builder アソシエーション Belongs To Has One Has Many Many To Many Association Mode Preloading (Eager Loading) Tutorials Context エラーハンドリング Method Chaining Session Hooks トランザクション マイグレーション Logger 汎用データベースインターフェース パフォーマンス データ型のカスタマイズ Scopes 規約 値の受け渡し Advanced Topics Database Resolver シャーディング Serializer Prometheus Hints Index 制約 複合主キー セキュリティ GORM Config プラグインの作成 ドライバの作成 変更履歴 コミュニティ 貢献する 現在のサイトを翻訳する Getting Started 概要 モデルを宣言する データベースに接続する CRUD Interface レコードの作成 レコードの取得 高度なクエリ レコードの更新 レコードの削除 Raw SQL & SQL Builder アソシエーション Belongs To Has One Has Many Many To Many Association Mode Preloading (Eager Loading) Tutorials Context エラーハンドリング Method Chaining Session Hooks トランザクション マイグレーション Logger 汎用データベースインターフェース パフォーマンス データ型のカスタマイズ Scopes 規約 値の受け渡し Advanced Topics Database Resolver シャーディング Serializer Prometheus Hints Index 制約 複合主キー セキュリティ GORM Config プラグインの作成 ドライバの作成 変更履歴 コミュニティ 貢献する 現在のサイトを翻訳する