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