皆さんこんにちは。どうも。
今回は、Spring+MyBatisの入門(備忘録)ということで、MyBatisとは?使い方やSpringとの連携方法をサンプル付きで解説!をやってみてエラーなどで詰まった個所と解決方法を述べていきます。
なぜこんなことをやろうかと思ったのか?ですが、仕事でSpring+MyBatis(O/Rマッパー)を使う必要が生じたからです。
これはあくまでバック側の話で、フロント側は普通はVueとかAngularですよね(今の仕事では主にVue使いそうですが・・)
で、MVCの中でも、Springって難しいですよね(個人的に)。
なんていうか、アノテーションとか独特ですし、サクサク使いこなすのって結構バリバリやってる人じゃないときついんじゃないかな・・と思うんです。
はい。ということで、前置きは置いといて、本題に入っていきます。
Eclipseを使って、上記のサンプルをやってみて、エラーなどで詰まった個所は以下の通りになります。
USERというテーブル名がH2データベースの予約語にあったため、被ってしまっていた。
→ダブルクォーテーションで囲うことでエスケープ。※1 ※2
SpringBoot Mybatis 起動時に factoryBeanObjectType エラー
→インストールするMyBatisのバージョンを変更(3.0.3で上手くいった)。※3
‘~Mapper’ that could not be found
→@MapperScanを定義。※4
Invalid bound statement (not found):~Mapper.selectall(or selectByIdなど)
→MapperXMLが見つからないことが原因。SpringBoot+MyBatisでは、MapperインターフェースとMapperXMLのパスが同一階層の場合のみ自動でMapperXMLを読み込んでくれる。
ただ、Mapperインターフェースの場所にMapperXMLを入れるのも分かりにくかったので、それは避けたかった。後、MapperXMLの格納場所をapplication.propertiesに定義するを行っても、解決しなかったので、MapperXMLのパスを浅くしたら上手く読み込めた(下記画像)。
このようにしたのは、他の記事を読んでいた時に、ちらっとこのように(下記画像のように)設定されていたのを見たので、(同じように悩んでいる人も)MapperインターフェースとMapperXMLをこのように設定すれば上手く読み込めるかもしれません。

上記が解決され、無事サンプルは上手く動きました。
