メインコンテンツまでスキップ

SQLを書かないDBアクセス

SQLを記述することなくデータベース・アクセス処理を組む場合の実装例を紹介します。データベース・アクセスのインターフェイスとしてIM-Repositoryを、ロジックの作成にはIM-LogicDesignerを利用します。

ヒント

IM-Repositoryの概要については、以下の記事を参照してください。

完成イメージ

ロジックの実装のため完成イメージはありません。実装イメージを参考にしてください。

説明

IM-LogicDesignerのIM-Repository用タスクを活用すると、SQLを記述することなくデータベース・アクセスを実現できます。このタスクを実行するために必要なエンティティの定義やデータのバリデーション設定については、IM-Repository上で作成・管理します。

通常のSQL定義(2WaySQL)による方法と比較したときの特徴は以下のとおりです。

項目IM-RepositoryタスクSQL定義(ユーザ定義)
実装ゆれタスクを利用することでゆれが出にくいSQLを直接書くため、実装者ごとに差が出やすい
柔軟なSQL用意されているタスクやエンティティのデータ定義に設定できる範囲内のみSQLを直接書くため、自由度が高い
メンテナンスIM-Repository側で一元管理されている定義を修正各定義ごとに修正
パフォーマンス調整は難しいSQLの実装によって調整可能
事前準備IM-Repositoryによる辞書項目・エンティティ・データ定義の設定が必要特になし
既存資材の再利用IM-Repositoryによる再定義やタスクによる再現が必要既存のSQLが使いまわしやすい

迷った場合の使い分けの指針

  • 以下のようなSQLに関わる細かなチューニングや結合条件が必要な場合にはSQL定義を、そうでない場合にはIM-Repositoryを利用することをおすすめします。
    • ✅複雑なSQLが必要かどうか?
    • ✅すでに作成済みのSQLがあり、それを流用したいかどうか?
    • ✅SQLの処理時間が重要かどうか?
  • それでも使い分けに悩む場合には、まずはローコードの特性を活かしやすいIM-Repositoryを利用してみましょう。
参考:IM-RepositoryタスクとSQL文の対応
IM-RepositoryタスクSQL文補足
エンティティデータの取得SELECT + WHERE 主キー主キーによる絞り込みで単一取得
エンティティデータの検索SELECT + WHEREエンティティの検索条件に設定した条件での複数取得
エンティティデータ件数の取得SELECT COUNT + WHEREエンティティの検索条件に設定した条件での件数のみ取得
エンティティデータの登録INSERT-
エンティティデータの更新UPDATE-
エンティティデータの削除DELETE-
エンティティデータの検証-エンティティに設定した必須や長さなどのバリデーションチェック

サンプル資材

実装例のサンプルを用意しています。Accel Studioにインポートして内容を確認できます。

備考
  • リンクからZipファイルをダウンロードし、Accel Studioアプリケーション管理インポートの画面でインポートすると、Accel Studioアプリケーション管理アプリケーション一覧intra-mart Low-Code HANDBOOKに資材が表示されます。
  • サンプル資材は2024 Spring(Iris)以降のバージョンでご利用いただけます。

実装イメージ

実装するロジックフローごとのイメージを紹介します。

デバッグ画面でロジックフローへの入力と出力を試すことができます。

登録処理

フローイメージ

エンティティデータの検証

このタスクではエンティティデータが、IM-Repositoryで定義しているエンティティの必須項目や辞書項目の制約と適合しているかどうかを検証します。

検証の対象になる項目は以下のとおりです。

  • エンティティ項目
    • 必須
  • 辞書項目の制約
    • 桁数、バイト数などの制限
    • 数値(最小、最大)
    • アルファベットなどのフォーマット
    • ……など
ヒント

検証エラーの場合、このタスクの出力値であるerrorItemsInfoオブジェクトにエラー情報が格納されるので、必要なエラー処理に利用できます。

また、検証エラーとなる場合、タスク固有設定の「エラーでも処理を継続する」にチェックを入れておかないと、検証タスク時点でロジックが異常終了するため注意してください。
エラーハンドリングしたい場合には、「エラーでも処理を継続する」にチェックを入れた状態でハンドリング処理を追加する必要があります。 具体例はサンプル資材やフローイメージを参照してください。

エンティティデータの登録

サブエンティティを設定していない場合、ひとつのタスクで、ひとつのレコードを登録します。SQLのINSERT文に相当します。

複数件の登録が必要な場合には繰り返しの制御要素を利用するか、リレーションが明細関係(1対多または1対1関係)の場合にはサブエンティティを利用できます。

注意

登録したいデータが登録済みだった場合、このタスクを実行するとエラー終了します。 これを回避するには、重複確認やエラーハンドリング処理を追加する必要があります。 重複確認の具体例はサンプル資材やフローイメージを参照してください。

ヒント

サブエンティティの概要については、以下記事の「関連項目」に関する記載を参照してください。

参照処理

フローイメージ

エンティティデータの取得

このタスクでは主キーを入力とし、合致するデータ1件を出力します。SQLのSELECT文に相当します。

ヒント
  • 合致するデータがなかった場合には出力が空となるため、その場合の考慮をしておくことをおすすめします。サンプル資材やフローイメージでは、データがなかった場合にはエラー終了としています。

編集処理

フローイメージ

エンティティデータの検証

登録処理で利用しているものと同じです。

エンティティデータの更新

このタスクでは登録処理のエンティティデータの登録と同様に、サブエンティティを設定していない場合は1件の更新をします。SQLのUPDATE文に相当します。

注意
  • このタスクでは主キー以外の項目がすべて更新されます。値を渡さなかった項目はnullで上書きされるため、注意してください。
  • このタスクでは更新対象が存在しない場合、エラー出力や異常終了はしません。厳格なチェックが必要な場合は、更新件数の確認処理などを追加してください。 更新件数の確認についての具体例はサンプル資材やフローイメージを参照してください。

削除処理

フローイメージ

エンティティデータの削除

このタスクでは登録処理のエンティティデータの登録と同様に、サブエンティティを設定していない場合は1件の削除をします。SQLのDELETE文に相当します。

注意

DELETE文相当のため、データベースから物理削除されます。取り扱いには注意してください。

検索処理

フローイメージ

エンティティデータ件数の取得

後述のエンティティデータの検索と同じ入力ですが、検索条件に合致したデータの総件数を出力します。

ヒント

ページングがある画面を作りたい場合には、検索タスクと合わせて利用するとよいでしょう。

エンティティデータの検索

このタスクの入力値のkeysには、タスクで指定したエンティティに設定されているデータ定義の検索条件の項目が表示されます。

※サンプル資材では、ユーザID(userId)、ユーザ名(useName)およびメールアドレス(mailAddress)を検索条件に設定しています。

備考

このタスクは検索条件を設定しているエンティティに対して利用してください。 また、入力値が空の場合には全件取得となります。