データベース

概要

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);  // ⑤
  1. PlatformTransactionManagerをフィールド定義します。
    @AutowiredによりBeanが生成されます。
  2. トランザクション定義情報を設定する
    DefaultTransactionDefinitionクラスを生成します。
  3. transactionManager#getTransactionでトランザクションを開始します。
  4. ロールバックする場合、transactionManager#rollbackを使用します。
  5. コミットする場合、transactionManager#commitを使用します。