Package nablarch.common.dao
Class UniversalDao
java.lang.Object
nablarch.common.dao.UniversalDao
汎用的なDAO機能を提供するクラス。
以下の機能を提供する。
- 主キーを条件にしたSELECT・UPDATE・DELETE文と、INSERT文をEntityクラスから自動生成して実行する。
- SQLを実行する
- 検索結果をBeanにマッピングする
- ページングのための検索を行う
- 検索時に遅延ロードを行う
EntityTableColumnIdVersionTemporalGeneratedValueSequenceGeneratorTableGenerator
- Author:
- kawasima, Hisaaki Shioiri
-
Nested Class Summary
Nested Classes -
Method Summary
Modifier and TypeMethodDescriptionstatic <T> voidbatchDelete(List<T> entities) 与えられたエンティティオブジェクトからデリート文を生成し一括実行する。static <T> voidbatchInsert(List<T> entities) 与えられたエンティティリストオブジェクトからインサート文を生成し一括実行する。static <T> voidbatchUpdate(List<T> entities) 与えられたエンティティ情報からアップデート文を生成し一括実行する。static <T> longcountBySqlFile(Class<T> entityClass, String sqlId) SQL_IDをもとに検索し、件数を取得する。static <T> longcountBySqlFile(Class<T> entityClass, String sqlId, Object params) SQL_IDをもとにバインド変数を展開して検索し、件数を取得する。static DaoContextdefer()検索結果の取得を遅延させる。static <T> intdelete(T entity) 与えられたエンティティオブジェクトからデリート文を生成し実行する。static <T> booleanSQL_IDをもとに検索し、データが存在するか否かを確認する。static <T> booleanSQL_IDをもとにバインド変数を展開して検索し、データが存在するか否かを確認する。static <T> EntityList<T>すべてのエンティティを取得する。static <T> EntityList<T>findAllBySqlFile(Class<T> entityClass, String sqlId) SQL_IDをもとに検索し、結果Beanのリストに格納して取得する。static <T> EntityList<T>findAllBySqlFile(Class<T> entityClass, String sqlId, Object params) SQL_IDをもとにバインド変数を展開した上で検索し、結果Beanのリストに格納して取得する。static <T> T主キーを指定して、1件だけエンティティを取得する。static <T> TfindByIdOrNull(Class<T> entityClass, Object... id) 主キーを指定して、1件だけエンティティを取得する。0件の場合はnullを返す。static <T> TfindBySqlFile(Class<T> entityClass, String sqlId, Object params) SQL_IDをもとにバインド変数を展開して検索し、結果を格納したBeanを一件取得する。static <T> TfindBySqlFileOrNull(Class<T> entityClass, String sqlId, Object params) SQL_IDをもとにバインド変数を展開して検索し、結果を格納したBeanを一件取得する。0件の場合はnullを返す。static <T> voidinsert(T entity) 与えられたエンティティオブジェクトからインサート文を生成し実行する。static DaoContextpage(long page) ページ数を指定する。static DaoContextper(long per) 1ページにつき何件取得するかを指定する。static <T> intupdate(T entity) 与えられたエンティティオブジェクトからアップデート文を生成し実行する。
-
Method Details
-
findById
主キーを指定して、1件だけエンティティを取得する。- Type Parameters:
T- エンティティクラス(戻り値の型)- Parameters:
entityClass- エンティティクラスオブジェクトid- 条件項目(複数のキーを使う場合は、対象テーブルでのキーの定義順に引き渡す)- Returns:
- 取得したエンティティ
- Throws:
NoDataException- 検索条件に該当するレコードが存在しない場合IllegalArgumentException- 主キーのカラム数と指定した条件数が一致しない場合IllegalStateException- 対象テーブルから主キーの定義順を取得できなかった場合
-
findByIdOrNull
主キーを指定して、1件だけエンティティを取得する。0件の場合はnullを返す。- Type Parameters:
T- エンティティクラス(戻り値の型)- Parameters:
entityClass- エンティティクラスオブジェクトid- 条件項目(複数のキーを使う場合は、対象テーブルでのキーの定義順に引き渡す)- Returns:
- 取得したエンティティ。0件の場合はnull。
- Throws:
IllegalArgumentException- 主キーのカラム数と指定した条件数が一致しない場合IllegalStateException- 対象テーブルから主キーの定義順を取得できなかった場合
-
findAll
すべてのエンティティを取得する。- Type Parameters:
T- エンティティクラス(戻り値の型)- Parameters:
entityClass- エンティティクラスオブジェクト- Returns:
- 取得したエンティティのリスト(該当0件の場合は空リスト)
-
findAllBySqlFile
SQL_IDをもとにバインド変数を展開した上で検索し、結果Beanのリストに格納して取得する。
結合した表のカラムを含めて射影する場合は、単一の表とマッピングされたEntityでは結果を格納できない。 そのような場合は、射影したカラムと対応するプロパティを定義したBeanを引き渡す。// 検索条件を引き渡すためのBeanを設定する // SQL「FIND_BY_AUTHOR」にBookエンティティのAUTHORカラムがバインド変数として記述されている場合を想定する Book condition = new Book(); condition.setAuthor("Martin Fowler"); EntityList<Book> books = UniversalDao.findAllBySqlFile(Book.class, "FIND_BY_AUTHOR", condition);- Type Parameters:
T- 検索結果をマッピングするBeanクラス- Parameters:
entityClass- 検索結果をマッピングするBeanクラスオブジェクトsqlId- SQL_IDparams- バインド変数(SQLファイル内のバインド変数に対応するBeanを作成し引き渡すこともできる)- Returns:
- 取得したBeanのリスト(該当0件の場合は空リスト)
-
findAllBySqlFile
SQL_IDをもとに検索し、結果Beanのリストに格納して取得する。 検索の詳細はfindAllBySqlFile(Class, String, Object)を参照すること。- Type Parameters:
T- 検索結果をマッピングするBeanクラス- Parameters:
entityClass- 検索結果をマッピングするBeanクラスオブジェクトsqlId- SQL_ID- Returns:
- 取得したBeanのリスト(該当0件の場合は空リスト)
-
findBySqlFile
SQL_IDをもとにバインド変数を展開して検索し、結果を格納したBeanを一件取得する。
検索条件に該当するレコードが複数存在する場合、例外の送出は行わず、検索結果の先頭行を取得して返却する。 確実に一行のレコードを取得する検索条件を設定すること。// 検索条件を引き渡すためのBeanを設定する // FIND_BY_IDにBookエンティティのIDカラムがバインド変数として記述されている場合を想定 Book condition = new Book(); condition.setId(1L); Book book = UniversalDao.findBySqlFile(Book.class, "FIND_BY_ID", condition);- Type Parameters:
T- 検索結果をマッピングするBeanクラス- Parameters:
entityClass- 検索結果をマッピングするBeanクラスオブジェクトsqlId- SQL_IDparams- バインド変数- Returns:
- 1件のBean
- Throws:
NoDataException- (検索条件に該当するレコードが存在しない場合)
-
findBySqlFileOrNull
SQL_IDをもとにバインド変数を展開して検索し、結果を格納したBeanを一件取得する。0件の場合はnullを返す。 検索結果が0件の場合にNoDataExceptionではなくnull返す以外については、findBySqlFile(Class, String, Object)と同じである。- Type Parameters:
T- 検索結果をマッピングするBeanクラス- Parameters:
entityClass- 検索結果をマッピングするBeanクラスオブジェクトsqlId- SQL_IDparams- バインド変数- Returns:
- 1件のBean。0件の場合はnull。
-
countBySqlFile
SQL_IDをもとに検索し、件数を取得する。 検索の詳細はcountBySqlFile(Class, String, Object)を参照すること。- Type Parameters:
T- エンティティクラス- Parameters:
entityClass- エンティティクラスsqlId- SQL_ID- Returns:
- 件数
-
countBySqlFile
SQL_IDをもとにバインド変数を展開して検索し、件数を取得する。 検索用のSQLを件数取得用のSQLへと変換して実行されるため、個別に件数取得用のSQLを作成する必要はない。- Type Parameters:
T- エンティティクラス- Parameters:
entityClass- エンティティクラスsqlId- SQL_IDparams- バインド変数- Returns:
- 件数
-
exists
SQL_IDをもとに検索し、データが存在するか否かを確認する。 検索の詳細はexists(Class, String, Object)を参照すること。- Type Parameters:
T- エンティティ型- Parameters:
entityClass- エンティティクラスsqlId- SQL_ID- Returns:
- 存在すればtrue
-
exists
SQL_IDをもとにバインド変数を展開して検索し、データが存在するか否かを確認する。 検索用のSQLを変換して使用する。- Type Parameters:
T- エンティティ型- Parameters:
entityClass- エンティティクラスsqlId- SQL_IDparams- バインド変数- Returns:
- 存在すればtrue
-
update
public static <T> int update(T entity) 与えられたエンティティオブジェクトからアップデート文を生成し実行する。 エンティティオブジェクトにてnullであるプロパティに対応するカラムは、そのままnullで更新される。 更新対象のエンティティにVersionが付与されたプロパティが存在する場合には、 対象レコードは排他制御の対象となり、更新処理実行時に自動で排他制御が実行される。 排他制御の対象であるエンティティを更新する際は、以下の場合にOptimisticLockExceptionを送出する。- バージョン番号の不一致で、更新対象が存在しない場合
- 更新条件に合致する更新対象が存在しない場合
- Type Parameters:
T- エンティティクラス- Parameters:
entity- エンティティオブジェクト- Returns:
- 更新件数
- Throws:
jakarta.persistence.OptimisticLockException- 更新対象が存在しない場合
-
batchUpdate
与えられたエンティティ情報からアップデート文を生成し一括実行する。 バージョン番号を用いた排他制御処理は行わない。 排他制御を必要とする場合には、update(Object)を使用すること。 もし、更新時にバージョン番号が不一致のエンティティオブジェクトが存在した場合、 そのレコードは更新されずに処理が正常に終了する。- Type Parameters:
T- エンティティクラス- Parameters:
entities- エンティティオブジェクトリスト
-
insert
public static <T> void insert(T entity) 与えられたエンティティオブジェクトからインサート文を生成し実行する。 エンティティオブジェクトにてnullであるプロパティに対応するカラムは、そのままnullで登録される。GeneratedValueが付与されているプロパティは採番された値が登録される。Versionが付与されたversionカラムに対して明示的に値を設定していたとしても、 「0」で上書きされてinsertされる。- Type Parameters:
T- エンティティクラス- Parameters:
entity- エンティティオブジェクト
-
batchInsert
与えられたエンティティリストオブジェクトからインサート文を生成し一括実行する。 エンティティオブジェクトにてnullであるプロパティに対応するカラムは、そのままnullで登録される。GeneratedValueが付与されているプロパティは採番された値が登録される。Versionが付与されたversionカラムに対して明示的に値を設定していたとしても、 「0」で上書きされてinsertされる。- Type Parameters:
T- エンティティクラス- Parameters:
entities- エンティティリスト
-
delete
public static <T> int delete(T entity) 与えられたエンティティオブジェクトからデリート文を生成し実行する。 エンティティの主キーが削除条件となるため、主キー値以外のフィールドの値の有無は動作に影響しない。- Type Parameters:
T- エンティティクラス- Parameters:
entity- エンティティオブジェクト- Returns:
- 削除件数
-
batchDelete
与えられたエンティティオブジェクトからデリート文を生成し一括実行する。 エンティティの主キーが削除条件となるため、主キー値以外のフィールドの値の有無は動作に影響しない。- Type Parameters:
T- エンティティクラス- Parameters:
entities- エンティティリスト
-
page
ページ数を指定する。
表示対象のページ数におけるレコード件数が、perメソッドで与えたページ区切りに満たない場合は、取得可能な件数分を返却する。// pageメソッドに「1」が与えられている場合に返却される件数は以下のようになる。 // perメソッドに「10」を与える→1~10件目を返す // perメソッドに「20」を与える→1~20件目を返す EntityList<Book> books = UniversalDao.page(1) .per(20) .findAllBySqlFile(Book.class, "FIND_ALL"); // pageメソッドに「2」が与えられている場合に返却される件数は以下のようになる。 // perメソッドに「10」を与える→11~20件目を返す // perメソッドに「20」を与える→21~40件目を返す EntityList<Book> books = UniversalDao.page(2) .per(20) .findAllBySqlFile(Book.class, "FIND_ALL");- perメソッドに10を与えていて、総件数が5件である場合、pageメソッドに1を与えた場合は1~5件目を返却する。
- perメソッドに10を与えていて、総件数が15件である場合、pageメソッドに2を与えた場合は11~15件目を返却する。
- Parameters:
page- ページ数- Returns:
- DaoContext
-
per
1ページにつき何件取得するかを指定する。
表示対象のページ数におけるレコード件数が、perメソッドで与えたページ区切りに満たない場合は、取得可能な件数分を返却する。 perメソッドに10を与えていて、総件数が5件である場合、pageメソッドに1を与えた場合は1~5件目を返却する。 perメソッドに10を与えていて、総件数が15件である場合、pageメソッドに2を与えた場合は11~15件目を返却する。// perメソッドに「10」が与えられている場合は、返却される件数は以下のようになる。 // pageメソッドに「1」を与える→1~10件目を返す // pageメソッドに「2」を与える→11~20件目を返す EntityList<Book> books = UniversalDao.page(1) .per(10) .findAllBySqlFile(Book.class, "FIND_ALL"); // perメソッドに「20」が与えられている場合は、返却される件数は以下のようになる。 // pageメソッドに「1」を与える→1~20件目を返す // pageメソッドに「2」を与える→21~40件目を返す EntityList<Book> books = UniversalDao.page(1) .per(20) .findAllBySqlFile(Book.class, "FIND_ALL");- Parameters:
per- 取得する件数- Returns:
- DaoContext
-
defer
検索結果の取得を遅延させる。 大量データを検索する場合でもヒープを圧迫することなく安全に検索結果を扱うことができる。// サーバサイドカーソルを利用するためclose処理を行う必要がある try (DeferredEntityList<Project> searchList = (DeferredEntityList<Project>) UniversalDao .defer() .findAllBySqlFile(Project.class, "SEARCH_PROJECT",searchCondition)) { for (Project project : searchList) { // projectを利用した処理 } }- Returns:
- DaoContext
-