Package nablarch.common.dao
Class UniversalDao
java.lang.Object
nablarch.common.dao.UniversalDao
汎用的なDAO機能を提供するクラス。
以下の機能を提供する。
- 主キーを条件にしたSELECT・UPDATE・DELETE文と、INSERT文をEntityクラスから自動生成して実行する。
- SQLを実行する
- 検索結果をBeanにマッピングする
- ページングのための検索を行う
- 検索時に遅延ロードを行う
Entity
Table
Column
Id
Version
Temporal
GeneratedValue
SequenceGenerator
TableGenerator
- Author:
- kawasima, Hisaaki Shioiri
-
Nested Class Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic <T> void
batchDelete
(List<T> entities) 与えられたエンティティオブジェクトからデリート文を生成し一括実行する。static <T> void
batchInsert
(List<T> entities) 与えられたエンティティリストオブジェクトからインサート文を生成し一括実行する。static <T> void
batchUpdate
(List<T> entities) 与えられたエンティティ情報からアップデート文を生成し一括実行する。static <T> long
countBySqlFile
(Class<T> entityClass, String sqlId) SQL_IDをもとに検索し、件数を取得する。static <T> long
countBySqlFile
(Class<T> entityClass, String sqlId, Object params) SQL_IDをもとにバインド変数を展開して検索し、件数を取得する。static DaoContext
defer()
検索結果の取得を遅延させる。static <T> int
delete
(T entity) 与えられたエンティティオブジェクトからデリート文を生成し実行する。static <T> boolean
SQL_IDをもとに検索し、データが存在するか否かを確認する。static <T> boolean
SQL_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> T
findByIdOrNull
(Class<T> entityClass, Object... id) 主キーを指定して、1件だけエンティティを取得する。0件の場合はnullを返す。static <T> T
findBySqlFile
(Class<T> entityClass, String sqlId, Object params) SQL_IDをもとにバインド変数を展開して検索し、結果を格納したBeanを一件取得する。static <T> T
findBySqlFileOrNull
(Class<T> entityClass, String sqlId, Object params) SQL_IDをもとにバインド変数を展開して検索し、結果を格納したBeanを一件取得する。0件の場合はnullを返す。static <T> void
insert
(T entity) 与えられたエンティティオブジェクトからインサート文を生成し実行する。static DaoContext
page
(long page) ページ数を指定する。static DaoContext
per
(long per) 1ページにつき何件取得するかを指定する。static <T> int
update
(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のリストに格納して取得する。// 検索条件を引き渡すための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
ページ数を指定する。// 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メソッドに「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
-