Mirage を Grails で使う

Mirage(※1)というORMをGrailsで使えるようにするための方法を記します。

(GORMと同一のConnectionを使用する方法はコチラ

 

作成したサンプルはGithubに公開しています。

コードレビューしていただけると、泣いて喜びます。

 

■ Mirageのダウンロード

BuildConfig.groovyに下記の設定を行う。

・repositories に 「mavenRepo "http://amateras.sourceforge.jp/mvn/"」を追記

・dependencies に 「compile 'jp.sf.amateras.mirage:mirage:1.1.6'」を追記

 

■ DIのための設定

resources.groovyを下記のように編集。

// ------------------------------------------------------------------- 

beans = {

    dataSource(org.apache.commons.dbcp.BasicDataSource) { bean ->
        bean.destroyMethod = 'close'
        driverClassName = '${dataSource.driverClassName}'
        url = '${dataSource.url}'
        username = '${dataSource.username}'
        password = '${dataSource.password}'
    }

   transactionManager(org.springframework.jdbc.datasource.DataSourceTransactionManager) {
        dataSource = dataSource
    }

    connectionProvider(jp.sf.amateras.mirage.integration.spring.SpringConnectionProvider) {
        transactionManager = transactionManager
    }

    dialect(jp.sf.amateras.mirage.dialect.MySQLDialect)

    sqlManager(jp.sf.amateras.mirage.SqlManagerImpl) {
        connectionProvider = connectionProvider
        dialect = dialect
    }
}

// ------------------------------------------------------------------- 

上記設定により、Grails でDI可能になります。また、トランザクション管理はGrailsが行ってくれるようになります。(デフォルトはServiceがトランザクション境界となります)

 

■ Serviceでの使用方法

以下のように使用できます。

// ------------------------------------------------------------------- 

class CustomerService {

    SqlManager sqlManager

    def list() {
        return sqlManager.getResultList(
                Customer.class, "com/area_b/samples/select.sql");
    }
}

// ------------------------------------------------------------------- 

SQLファイルは ProjectRoot/src/java 下にパッケージを切って配備しています。

 

以上でMirageが使用可能となります。

Mirageかわいいよ Mirage

 

※1.Mirage とは

JavaのO/Rマッパ。2WaySQLの記述方法を用いた外部SQLを読み込み、実行可能。もちろん、Entityにアノテーションベースのメタ情報を設定することによりSQLレスでCRUDも可能。

公式ページはこちら