@Published public final class UniversalDao extends java.lang.Object
EntityTableColumnIdVersionTemporalGeneratedValueSequenceGeneratorTableGenerator| Modifier and Type | Class and Description | 
|---|---|
static class  | 
UniversalDao.Transaction
トランザクション境界を作るためのクラス。
 
 通常の業務トランザクションと異なるトランザクションでデータベースアクセスを行いたい場合、
 本クラスを継承することで別トランザクション内で 
UniversalDaoを使用することができる。
  | 
| Modifier and Type | Method and Description | 
|---|---|
static <T> void | 
batchDelete(java.util.List<T> entities)
与えられたエンティティオブジェクトからデリート文を生成し一括実行する。
 
 エンティティの主キーが削除条件となるため、主キー値以外のフィールドの値の有無は動作に影響しない。
  
 | 
static <T> void | 
batchInsert(java.util.List<T> entities)
与えられたエンティティリストオブジェクトからインサート文を生成し一括実行する。
 
 エンティティオブジェクトにてnullであるプロパティに対応するカラムは、そのままnullで登録される。
 
  
GeneratedValueが付与されているプロパティは採番された値が登録される。
 
 Versionが付与されたversionカラムに対して明示的に値を設定していたとしても、
 「0」で上書きされてinsertされる。 | 
static <T> void | 
batchUpdate(java.util.List<T> entities)
与えられたエンティティ情報からアップデート文を生成し一括実行する。
 
 バージョン番号を用いた排他制御処理は行わない。
 排他制御を必要とする場合には、 
update(Object)を使用すること。
 もし、更新時にバージョン番号が不一致のエンティティオブジェクトが存在した場合、
 そのレコードは更新されずに処理が正常に終了する。 | 
static <T> long | 
countBySqlFile(java.lang.Class<T> entityClass,
              java.lang.String sqlId)
SQL_IDをもとに検索し、件数を取得する。
 
 検索の詳細は 
countBySqlFile(Class, String, Object)を参照すること。 | 
static <T> long | 
countBySqlFile(java.lang.Class<T> entityClass,
              java.lang.String sqlId,
              java.lang.Object params)
SQL_IDをもとにバインド変数を展開して検索し、件数を取得する。
 
 検索用のSQLを件数取得用のSQLへと変換して実行されるため、個別に件数取得用のSQLを作成する必要はない。 
 | 
static DaoContext | 
defer()
検索結果の取得を遅延させる。
 
 大量データを検索する場合でもヒープを圧迫することなく安全に検索結果を扱うことができる。 
 | 
static <T> int | 
delete(T entity)
与えられたエンティティオブジェクトからデリート文を生成し実行する。
 
 エンティティの主キーが削除条件となるため、主キー値以外のフィールドの値の有無は動作に影響しない。
  
 | 
static <T> boolean | 
exists(java.lang.Class<T> entityClass,
      java.lang.String sqlId)
SQL_IDをもとに検索し、データが存在するか否かを確認する。
 
 検索の詳細は 
exists(Class, String, Object)を参照すること。
  | 
static <T> boolean | 
exists(java.lang.Class<T> entityClass,
      java.lang.String sqlId,
      java.lang.Object params)
SQL_IDをもとにバインド変数を展開して検索し、データが存在するか否かを確認する。
 
 検索用のSQLを変換して使用する。
  
 | 
static <T> EntityList<T> | 
findAll(java.lang.Class<T> entityClass)
すべてのエンティティを取得する。 
 | 
static <T> EntityList<T> | 
findAllBySqlFile(java.lang.Class<T> entityClass,
                java.lang.String sqlId)
SQL_IDをもとに検索し、結果Beanのリストに格納して取得する。
 
 検索の詳細は 
findAllBySqlFile(Class, String, Object)を参照すること。 | 
static <T> EntityList<T> | 
findAllBySqlFile(java.lang.Class<T> entityClass,
                java.lang.String sqlId,
                java.lang.Object params)
SQL_IDをもとにバインド変数を展開した上で検索し、結果Beanのリストに格納して取得する。 
 | 
static <T> T | 
findById(java.lang.Class<T> entityClass,
        java.lang.Object... id)
主キーを指定して、1件だけエンティティを取得する。 
 | 
static <T> T | 
findByIdOrNull(java.lang.Class<T> entityClass,
              java.lang.Object... id)
主キーを指定して、1件だけエンティティを取得する。0件の場合はnullを返す。 
 | 
static <T> T | 
findBySqlFile(java.lang.Class<T> entityClass,
             java.lang.String sqlId,
             java.lang.Object params)
SQL_IDをもとにバインド変数を展開して検索し、結果を格納したBeanを一件取得する。 
 | 
static <T> T | 
findBySqlFileOrNull(java.lang.Class<T> entityClass,
                   java.lang.String sqlId,
                   java.lang.Object params)
SQL_IDをもとにバインド変数を展開して検索し、結果を格納したBeanを一件取得する。0件の場合はnullを返す。
 
 検索結果が0件の場合に 
NoDataExceptionではなくnull返す以外については、findBySqlFile(Class, String, Object)
 と同じである。 | 
static <T> void | 
insert(T entity)
与えられたエンティティオブジェクトからインサート文を生成し実行する。
 
 エンティティオブジェクトにてnullであるプロパティに対応するカラムは、そのままnullで登録される。
 
  
GeneratedValueが付与されているプロパティは採番された値が登録される。
 
 Versionが付与されたversionカラムに対して明示的に値を設定していたとしても、
 「0」で上書きされてinsertされる。 | 
static DaoContext | 
page(long page)
ページ数を指定する。 
 | 
static DaoContext | 
per(long per)
1ページにつき何件取得するかを指定する。 
 | 
static <T> int | 
update(T entity)
与えられたエンティティオブジェクトからアップデート文を生成し実行する。
 
 エンティティオブジェクトにてnullであるプロパティに対応するカラムは、そのままnullで更新される。
 
 更新対象のエンティティに 
Versionが付与されたプロパティが存在する場合には、
 対象レコードは排他制御の対象となり、更新処理実行時に自動で排他制御が実行される。
 
 排他制御の対象であるエンティティを更新する際は、以下の場合にOptimisticLockExceptionを送出する。
 
 バージョン番号の不一致で、更新対象が存在しない場合
 更新条件に合致する更新対象が存在しない場合
 
  | 
public static <T> T findById(java.lang.Class<T> entityClass,
                             java.lang.Object... id)
T - エンティティクラス(戻り値の型)entityClass - エンティティクラスオブジェクトid - 条件項目(複数のキーを使う場合は、対象テーブルでのキーの定義順に引き渡す)NoDataException - 検索条件に該当するレコードが存在しない場合java.lang.IllegalArgumentException - 主キーのカラム数と指定した条件数が一致しない場合java.lang.IllegalStateException - 対象テーブルから主キーの定義順を取得できなかった場合public static <T> T findByIdOrNull(java.lang.Class<T> entityClass,
                                   java.lang.Object... id)
T - エンティティクラス(戻り値の型)entityClass - エンティティクラスオブジェクトid - 条件項目(複数のキーを使う場合は、対象テーブルでのキーの定義順に引き渡す)java.lang.IllegalArgumentException - 主キーのカラム数と指定した条件数が一致しない場合java.lang.IllegalStateException - 対象テーブルから主キーの定義順を取得できなかった場合public static <T> EntityList<T> findAll(java.lang.Class<T> entityClass)
T - エンティティクラス(戻り値の型)entityClass - エンティティクラスオブジェクトpublic static <T> EntityList<T> findAllBySqlFile(java.lang.Class<T> entityClass, java.lang.String sqlId, java.lang.Object params)
 
 // 検索条件を引き渡すための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);
 
 
 結合した表のカラムを含めて射影する場合は、単一の表とマッピングされたEntityでは結果を格納できない。
 そのような場合は、射影したカラムと対応するプロパティを定義したBeanを引き渡す。T - 検索結果をマッピングするBeanクラスentityClass - 検索結果をマッピングするBeanクラスオブジェクトsqlId - SQL_IDparams - バインド変数(SQLファイル内のバインド変数に対応するBeanを作成し引き渡すこともできる)public static <T> EntityList<T> findAllBySqlFile(java.lang.Class<T> entityClass, java.lang.String sqlId)
findAllBySqlFile(Class, String, Object)を参照すること。T - 検索結果をマッピングするBeanクラスentityClass - 検索結果をマッピングするBeanクラスオブジェクトsqlId - SQL_IDpublic static <T> T findBySqlFile(java.lang.Class<T> entityClass,
                                  java.lang.String sqlId,
                                  java.lang.Object params)
 
 // 検索条件を引き渡すためのBeanを設定する
 // FIND_BY_IDにBookエンティティのIDカラムがバインド変数として記述されている場合を想定
 Book condition = new Book();
 condition.setId(1L);
 Book book = UniversalDao.findBySqlFile(Book.class, "FIND_BY_ID", condition);
 
 
 検索条件に該当するレコードが複数存在する場合、例外の送出は行わず、検索結果の先頭行を取得して返却する。
 確実に一行のレコードを取得する検索条件を設定すること。
 T - 検索結果をマッピングするBeanクラスentityClass - 検索結果をマッピングするBeanクラスオブジェクトsqlId - SQL_IDparams - バインド変数NoDataException - (検索条件に該当するレコードが存在しない場合)public static <T> T findBySqlFileOrNull(java.lang.Class<T> entityClass,
                                        java.lang.String sqlId,
                                        java.lang.Object params)
NoDataExceptionではなくnull返す以外については、findBySqlFile(Class, String, Object)
 と同じである。T - 検索結果をマッピングするBeanクラスentityClass - 検索結果をマッピングするBeanクラスオブジェクトsqlId - SQL_IDparams - バインド変数public static <T> long countBySqlFile(java.lang.Class<T> entityClass,
                                      java.lang.String sqlId)
countBySqlFile(Class, String, Object)を参照すること。T - エンティティクラスentityClass - エンティティクラスsqlId - SQL_IDpublic static <T> long countBySqlFile(java.lang.Class<T> entityClass,
                                      java.lang.String sqlId,
                                      java.lang.Object params)
T - エンティティクラスentityClass - エンティティクラスsqlId - SQL_IDparams - バインド変数public static <T> boolean exists(java.lang.Class<T> entityClass,
                                 java.lang.String sqlId)
exists(Class, String, Object)を参照すること。
 T - エンティティ型entityClass - エンティティクラスsqlId - SQL_IDpublic static <T> boolean exists(java.lang.Class<T> entityClass,
                                 java.lang.String sqlId,
                                 java.lang.Object params)
T - エンティティ型entityClass - エンティティクラスsqlId - SQL_IDparams - バインド変数public static <T> int update(T entity)
Versionが付与されたプロパティが存在する場合には、
 対象レコードは排他制御の対象となり、更新処理実行時に自動で排他制御が実行される。
 
 排他制御の対象であるエンティティを更新する際は、以下の場合にOptimisticLockExceptionを送出する。
 T - エンティティクラスentity - エンティティオブジェクトjavax.persistence.OptimisticLockException - 更新対象が存在しない場合public static <T> void batchUpdate(java.util.List<T> entities)
update(Object)を使用すること。
 もし、更新時にバージョン番号が不一致のエンティティオブジェクトが存在した場合、
 そのレコードは更新されずに処理が正常に終了する。T - エンティティクラスentities - エンティティオブジェクトリストpublic static <T> void insert(T entity)
GeneratedValueが付与されているプロパティは採番された値が登録される。
 
 Versionが付与されたversionカラムに対して明示的に値を設定していたとしても、
 「0」で上書きされてinsertされる。T - エンティティクラスentity - エンティティオブジェクトpublic static <T> void batchInsert(java.util.List<T> entities)
GeneratedValueが付与されているプロパティは採番された値が登録される。
 
 Versionが付与されたversionカラムに対して明示的に値を設定していたとしても、
 「0」で上書きされてinsertされる。T - エンティティクラスentities - エンティティリストpublic static <T> int delete(T entity)
T - エンティティクラスentity - エンティティオブジェクトpublic static <T> void batchDelete(java.util.List<T> entities)
T - エンティティクラスentities - エンティティリストpublic static DaoContext page(long 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メソッドで与えたページ区切りに満たない場合は、取得可能な件数分を返却する。
 page - ページ数public static DaoContext per(long per)
 
  // 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");
 
 
 表示対象のページ数におけるレコード件数が、perメソッドで与えたページ区切りに満たない場合は、取得可能な件数分を返却する。
 perメソッドに10を与えていて、総件数が5件である場合、pageメソッドに1を与えた場合は1~5件目を返却する。
 perメソッドに10を与えていて、総件数が15件である場合、pageメソッドに2を与えた場合は11~15件目を返却する。
 per - 取得する件数public static DaoContext defer()
 
 // サーバサイドカーソルを利用するためclose処理を行う必要がある
 try (DeferredEntityList<Project> searchList =  (DeferredEntityList<Project>) UniversalDao
         .defer()
         .findAllBySqlFile(Project.class, "SEARCH_PROJECT",searchCondition)) {
     for (Project project : searchList) {
         // projectを利用した処理
     }
 }