XMLを書かず、MyBatisで任意のSQLを実行する方法を紹介します。
| I use this utilitary class: import java.util.List;
import org.apache.ibatis.annotations.SelectProvider;
public interface SqlMapper {
static class PureSqlProvider {
public String sql(String sql) {
return sql;
}
public String count(String from) {
return "SELECT count(*) FROM " + from;
}
}
@SelectProvider(type = PureSqlProvider.class, method = "sql")
public List<?> select(String sql);
@SelectProvider(type = PureSqlProvider.class, method = "count")
public Integer count(String from);
@SelectProvider(type = PureSqlProvider.class, method = "sql")
public Integer execute(String query);
}
| answered Nov 16 '12 at 18:28 |
|
ただし、select結果のタイプを指定されてないため、そのままだと、UnsupportedOperationException例外が発生してしまいます。 解決方法2つあります。 1.結果オブジェクトを指定する方法 例:public List<?> select(String sql); の中に?の代わりに、実際にオブジェクトタイプEmpを指定する。
この方法は、SQLと結果オブジェクトが緊結合になってしまって、やはり表題の任意のSQLを実行できないです。 2.結果オブジェクトはMapとする public List<?> select(String sql); の中にある?の代わりに、Mapを指定する。 そうすれば、結果はMapのリストになり、Mapにselect結果の項目名と値が入っています。使い方は結構便利ですよ。 特にテストデータ準備、テーブルにデータ検証にには、かなり便利のツールとして使えます。 Google+By Zhang Wenxu |