データベース¶
概要¶
TERASOLUNA Global Framework では、以下2種類の永続化フレームワークを使用することができます。当項では下記それぞれを使用したデータベースプログラミングの方法を説明します。
- Spring Data JPA
- MyBatis(2.3)
プログラミング方法¶
それぞれのデータベースプログラミング方法については下記ページにて説明します。
また下記「エンティティクラスの生成」および「トランザクション制御」については、上記プログラミング方法に共通した内容です。
エンティティクラスの生成¶
エンティティクラスとは、@Entityアノテーションが注釈されたクラスです。Eclipse DTP には、データベースに接続して選択したテーブルからエンティティクラスを生成する機能があります。詳細については下記ページを参照してください。
トランザクション制御¶
トランザクション制御の設定は任意のクラス・メソッドに@Transactionalアノテーションを付加して設定します。例えば、サービスクラスのクラス単位にトランザクション境界を設定する場合、以下のようにクラスに@Transactionalアノテーションを付加します。import org.springframework.transaction.annotation.Transactional; ... @Service @Transactional public class HogeServiceImpl implements HogeService { ...コラム
@Transactionalはメソッド単位に設定することもできます。
Rollbackする例外を定義する¶
トランザクション境界内で例外が発生した場合、デフォルトでは、RuntimeExceptionを継承する例外のみロールバックされます。ロールバックする例外を追加定義する場合、以下のように@TransactionalにrollbackFor属性を付加します。@Transactional(rollbackFor=java.lang.Exception.class)コラム
逆に、noRollbackFor属性を設定することで、ロールバックしない例外を設定することもできます。
明示的トランザクション¶
アノテーションを用いず、ソースコード内に直接トランザクション処理を記述する場合、以下のようにします。import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.DefaultTransactionDefinition; ... @Autowired PlatformTransactionManager transactionManager;// ① ... @Override public void store(MyCompany entity) { DefaultTransactionDefinition def = new DefaultTransactionDefinition(); // ② TransactionStatus status = transactionManager.getTransaction(def); // ③ try { //ビジネスロジック } catch (RuntimeException e) { transactionManager.rollback(status); // ④ throw e; } transactionManager.commit(status); // ⑤
PlatformTransactionManagerをフィールド定義します。@AutowiredによりBeanが生成されます。 トランザクション定義情報を設定するDefaultTransactionDefinitionクラスを生成します。 transactionManager#getTransactionでトランザクションを開始します。 ロールバックする場合、transactionManager#rollbackを使用します。 コミットする場合、transactionManager#commitを使用します。