JavaのデータベースマイグレーションのライブラリであるFlywayですが、SQLファイルだけでなく、Javaのコードによるマイグレーションにも対応しています。
やり方は簡単で、SQLファイルと同じパッケージ(デフォルトだとdb.migration)配下に、SQLファイルと同じ規則でBaseJavaMigration
を継承したクラスを追加して、migrate
メソッドを実装するだけです。
package db.migration; import org.flywaydb.core.api.migration.BaseJavaMigration; import org.flywaydb.core.api.migration.Context; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.jdbc.datasource.SingleConnectionDataSource; public class V2__Load_data extends BaseJavaMigration { @Override public void migrate(Context context) throws Exception { NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate( new SingleConnectionDataSource(context.getConnection(), true)); jdbcTemplate.update( "INSERT INTO customers(first_name, last_name, address) VALUES (:firstName, :lastName, :address)", new MapSqlParameterSource() .addValue("firstName", "Taro") .addValue("lastName", "Yamada") .addValue("address", "Chiba")); } }
SQLで書くのが面倒なもの(ロジック自体が既にJava側にあるようなものとか)は、SQLで頑張らずにJava側での処理で行った結果をデータベースに登録する、、といったことで手間が減らせそうです。
また、データベース以外(ファイルとして保存されているようなデータとか)のマイグレーションも、これを使うと合わせて行うことができるので、いろいろ幅が広がりそうだなーと思いました。