MyBatis/Tips
内部実装について
内部実装について
Mapで順番を固定したい
Mapで順番を固定したい
MyBatisでResultType="map"を指定した場合、実装はHashMapを使っているのでSQLで指定したカラムの順番は保証されない。
(DefaultObjectFactory#resolveInterface(Class))
XMLの場合
mapperをXMLで記載している場合は簡単
カラムの順番が重要な場合(拡張for文で回したいとか)は、ResultType="LinkedHashMap"を指定する。
mapperアノテーションの場合
(MyBatis3から導入された)アノテーションで記載したい場合、@MapKeyにクラス指定はできないので発想を変える必要がある。
一番簡単なのはDefaultObjectFactoryを継承したクラスを用意して、Mapインターフェースの実装をLinkedHashMapに変えてしまうというやり方。
その場合、mybatis-config.xmlを変更する必要がある(SqlSessionFactoryをConfiguraiton使って生成していることはあまりないと思うが考え方は一緒)。
すでにパッチが提供されているのでそのとおりにするだけ