MyBatisネタ
例によってざっくり備忘録メモ
Springと連携させている時の注意点
DBの接続先はMapperScanがBeanをDIコンテナに登録した時の、データソースの設定が使用される。
@TransactionalのtransactionManagerを切り替えても、切り替えたtransactionManagerで設定されているデータソースのDBに接続しに行くわけではないので注意
まったく同じテーブル構成で、DBの接続先だけが違うようなケース(データソースを2つ用意してそれぞれに個別でアクセスしたい場合)では、
データソース1用のMapperScanと、データソース2用のMapperScanを両方用意し、データソースの片方は、sessionFactoryRefとnameGeneratorを別で指定する必要あり。
※そもそもやり方間違ってる可能性もあるけど。。
nameGeneratorは、生成されるBean名が被らないようにするために必要。
※HogeMapper.java に対してのBeanが生成される際に、何も指定しないと、データソース1用も2用もhogeMapperというBean名で生成しようとするため、名前被りで落ちる。
DIする時(Autowiredする時)もBean名を指定すること。
MyBatis を利用した web application 開発についてのご紹介
eclipse plugin
eclipseマーケットプレイス > Mybatipse
xml書く時に補完が効くようになるので、ほぼ必須
分かりやすい使い方
エンティティクラスにリレーになるエンティティのプロパティを定義して、マッピングさせると幾らか感覚的になる。。?
※GitHubのTest1のtest2プロパティ参照。同様にTest1Mapper.xml の selectTest1Test2c も参照
別xmlに記述した定義(resultMap等)を呼び出す
自動生成
Enum対応はColumnOverride使う
http://blog.zaq.ne.jp/oboe2uran/article/1180/
http://tech-blog.tsukaby.com/archives/205
※GitHubのmyBaitsGeneratorConfig.xml参照
pluginを使用する場合は、generatorConfig.xml 右クリック> 実行の構成 > クラスパス > プロジェクトの追加 > でPluginクラスのプロジェクトを追加する
出力javaファイルの文字コードの指定は
<context>
<property name="javaFileEncoding" value="UTF-8" />
~
</context>
自動生成されたエンティティのフィールドをprotectedにする
サンプルコードの FieldVisibilityProtectedPlugin.java と myBaitsGeneratorConfig.xml 参照
※自前のpluginを作り(FieldVisibilityProtectedPlugin)、自動実行のpluginとして呼び出す(myBaitsGeneratorConfig.xml の pluginタグ)
LocalDateTime用のTypeHandler
※mybatis-config.xml参照
※https://github.com/javaplugs/mybatis-types から必要なタイプハンドラのソースを自プロジェクトにコピーし、xmlのtypehandlerのパスに通す
cacheを切る
http://www.mybatis.org/mybatis-3/ja/configuration.html
のsettingsのcacheEnabled
デフォルトだとcacheが効いているため、1トランザクション?(細かい単位は忘れた)の中で1度実行させているクエリをもう一度投げてもDBまでいかない。
※参考 キャッシュの設定としてはlocalCacheScopeもある
MyBatisGeneratorがjavaファイルを上書きしてくれない(上書き設定にすると、@mbggenerated以外のコードを消してしまう)
eclipseのプラグインを入れ、それを使うと上書きが上手いこといく。
※javaファイルのマージ機能が使えるのが、eclipseプラグインだけらしい。。(1.3.1時点)
http://blogj.harawata.net/2012/05/mybatis-generator.html
http://intink.blogspot.jp/2012/11/mybatisibatismybatis-generator.html
pluginの場所は下記参照
http://www.mybatis.org/generator/running/runningWithEclipse.html
MyBatis で生SQLを叩きたい
[Java]MyBatisの動的SQLでパフォーマンスを改善する