mybatis のスタートガイド
https://mybatis.org/mybatis-3/ja/getting-started.html
に書いてあるのは、どういうDatasource を用意すれば良いのか明記されてなくて
ちょっと不親切と思っていた。
org.apache.ibatis.datasource.unpooled.UnpooledDataSource
を使うのが良いのでは?と思った。
先日の投稿、
Map entrySet() から、GenericBuilder → Fieldsetter Streamで集約してインスタンス - Oboe吹きプログラマの黙示録
の応用例として、
DB接続情報がJSONのテキストになってる場合、JSON→ Map から Datasource を生成するのに
利用できそうである。
JSONテキスト
{ "driver" : "com.mysql.jdbc.Driver", "url" : "jdbc:mysql://127.0.0.1:3308/test", "username" : "uranus", "password" : "password" }
これを読込んで、Map から Datasource を生成
Map<String, String> map = new GsonBuilder().create() .fromJson(jsontext, new TypeToken<Map<String, String>>(){}.getType()); DataSource source = map.entrySet().stream() .collect(()->GenericBuilder.of(UnpooledDataSource::new), (r, t)->{ r.with(Fieldsetter.of((p, u)->t.getKey()), t.getValue()); }, (r, t)->{}).build();
作成した Datasource から MyBatis 使用は以下にまとめたので、、
yipuran-mybatis/SQLProcess.java at master · yipuran/yipuran-mybatis · GitHub
これを使って。。。
public interface SimpleMapper{ @Select("SELECT * FROM users WHERE age > #{value}") public List<User> getList(int over); }
SQLProcess proc = new SQLProcess(); proc.setDatasource(source); proc.accept(SimpleMapper.class, s->{ List<Alpha> list = s.getMapper(SimpleMapper.class).getList(30); // });
このように、ラムダ式まで形成させてしまうと、コードが楽になる。