[Go言語]ginフレームワークでアプリ開発~MySQLの更新処理~

前回は、Go言語にてMySQLのエラーハンドリングを実装しました。

今回は、MySQLの更新処理を実装していきます。

前回

プロジェクト構成

現在のプロジェクト構成は以下のようになっています。

MySQLデータの一括更新

現時点では、商品の保存と取得しかできません。PUTメソッドを使って、既存の商品データをアップデートできるようにします。

URLマッピングの追加

最初にユーザーリクエストをマッピングし、指定の処理に振り分ける実装を行います。

router.PUTを追加しました。PUTメソッドがリクエストされた場合、UpdateProduct関数に処理が振り分けられます。

尚、UpdateProduct関数は、Controllerに設定します。

コントローラーの追加

コントローラーでは、URLマッピングから受け取ったリクエストを適切なサービスに振り分ける役割を担います。

URLマッピングで、"/products/:product_id" を指定しており、ginのコンテキスト(c)でproduct idを取得することが可能です。

その場合、URLを「http://localhost:8080/products/1」にする必要があります。

その後、指定したIDを保持したProduct Structを生成し、UpdateProductメソッドに処理を依頼してます。

UpdateProductは、サービスに実装します。

サービスの追加

次にサービスを追加します。

サービスには、ビジネスロジックを実装します。

最初にGetサービスから既存の商品情報を取得します。

次に、Updateメソッド(これから実装する)にて情報の更新を行います。

Update処理の追加

公式サイトを参考に一括更新処理を追加してみましょう。

Saveメソッドを使って、全フィールドの一括更新を行いました。

動作確認

動作確認をしてみましょう。

まず、「http://localhost:8080/products/1」にGETリクエストを送り、データの確認をします。

取得できたデータは、以下でした。

続いて、PUTメソッドでデータの更新を行います。

更新するデータは、以下です。

Sendボタンを押下します。

ID=1のデータが更新されましたね。

MySQLデータの部分更新

PUTメソッドは、リクエスト先のリソースを丸ごと更新する際に使用されるメソッドですが、PATCHメソッドは部分的な更新を担当します(そういった使い分けをしています)。

URLマッピングの追加

コントローラーの修正

ユーザーからのリクエストメソッドの種別を判定する処理を入れます。

c.Request.MethodにてPATCHメソッドが取得できたら、isPartial変数にはtrueが入るようになります。

この変数をサービス(UpdateProduct)に渡します。

サービスの修正

Controllerの修正に合わせて、サービスも修正します。

PATCHの場合は個別にパラメータを抽出し、PartailUpdateメソッドで部分置換を行う処理を実装しました。

Partial Update処理の追加

最後に部分更新処理を追加します。

Saveメソッドでも対応可能だとは思いますが、別の書き方としてUpdatesメソッドを使用してみました。

Updatesメソッドでは、以下のようなクエリが発行されます。

動作確認

それでは、動作確認をしてみましょう。

コンテナを立ち上げ直してから、Talend API Testerからテストします。

データの一部分を書き換えたいので、nameだけ指定します。

それでは、リクエスト先に「http://localhost:8080/products/1」を指定し、メソッドを「PATCH」に変更後、Sendボタンを押下しましょう。

戻り値として受け取ったデータを確認してみると、nameがアップデートされたことがわかります。

次回

次回は、MySQLの削除処理について学びましょう。

関連記事

コメントを残す