JavaのWebアプリケーション開発フレームワークによる、Webサイト開発の顛末記です。

EclipseのMavenを使った、Spring-MVC、Thymeleaf、MyBatis 等のプログラミングテクニックを、
備忘録的に記録しています。実際に動くソースコードを多用して説明していますので、
これからEclipseや、Spring-MVCを始めたいと思っている人にとって、少しでも参考になれば幸いです。
■Spring Boot の小径 第4歩 Spring Boot 匍匐前進
4-6)MyBatisによるDB連携
Spring Boot による MyBatis の設定は、かなり手こずりました。
色々あるのですが、まずこれまで
mybatis-spring-boot-starter 1.1 だったものが、2017年1月に
mybatis-spring-boot-starter 1.2 が出現し、色々と仕様変更があった模様で
2017年2月の時点では、情報が新旧錯綜していて迷子状態に。
しばらく考えた末、古いものは切り捨てて、mybatis-spring-boot-starter 1.2 に絞って情報をかき集る事にしました。
で、ここからが問題なのですが、
ネットの情報によれば、DBが存在する前提で
classpath配下(main/resources)に application.yml(もしくは、application.properties)を作って
これに、JDBC接続情報を定義し、
SQLマッパーインターフェースと、エンティティクラス(DTO)を作成して、runをすればサクッサクッと動きまっせ!
とかいう嬉しい(怪しい)宣伝文句に踊らされて約半月あまり、深い霧の海で難破してしまいました。

要するに、書いてある通りに設定してみましたが、結論から言うと、ウンともスンとも反応してくれない(ToT)
まずJDBCのDataSourceさえ認識してくれていない模様。よーわからん。。。
こうなったら、Spring Bootお仕着せのブラックボックス環境ではあまり自由度が無いようなので、
JDBC DataSourceや、MyBatis の細かい設定をJavaベースで書いた方が早いと思い、舵を切り直しました。

という訳で、新しい進路目標を以下にいくつか揚げてみます。
1)Spring Boot バージョンは、 mybatis-spring-boot-starter 1.2で実装する事にします。
   ⇒ Eclipse の Gradle Project バージョンを 1.3.8 から、 1.4.4 にアップグレードします。
2)JDBCと、MyBatis の設定はConfigクラスを自作して、可能な限り外部ファイルで定義します。
   ⇒ Spring-MVC の設定ファイル(applicationContextDB.xml)と同等の設定を可能にしたい。
3)SQLは従来通り、XMLファイルで定義したい(これは次節で解説)

あたりを目標に前進してみる事にします。

それでは早速始めましょう
1)Spring Boot バージョンアップ
「2-1)Gradleプロジェクトの生成」では、Spring Boot-1.3.8 でプロジェクトを作成しましたが、
mybatis-spring-boot-starter 1.2を扱うためには、Spring Boot-1.4.4以降を使う必要があります。
そのために、build.gradleスクリプトを修正します。
build.gradle

基本的には先頭の、springBootVersionを、1.3.8 から、1.4.4 に変更するだけでバージョンアップ完了です!(簡単っすね!)
その他、修正/追加カ所を、赤字で表示しています。
あと、Thymeleafのバージョンが、spring-boot-starter-thymeleafでは、Thymeleaf2.x系なので
これをやめて、3.x系を取り込むようにしました。
今回 DataSourceに、tomcat-dbcpを使うつもりなので、それも追加しています。
ただし、デプロイ先(Tomcatで動いている)には、tomcat-dbcpは存在している前提で、
compileではなく、compileOnlyで定義しています。

Spring Bootバージョンアップに伴う注意点。
 Springスターター・プロジェクト作成時に自動作成されるクラス
 main/java/**/ServletInitializer.javaですが、1.3.8から1.4.4にバージョンアップしたために、
 継承元クラス(SpringBootServletInitializer)のパッケージが変更になっており警告が表示されます。
 旧:import org.springframework.boot.context.web.SpringBootServletInitializer;
 を
 新:import org.springframework.boot.web.support.SpringBootServletInitializer;
 に変更してください。

以上で、Spring Boot バージョンアップは完了です。
2)JDBC/MyBatis のプロパティ設定とConfigクラス作成
JDBCドライバと、Mybatis の設定情報を外部ファイルに定義します。
ファイル名は、一応なんでもいいのですが無難な所で、main/resources/application.properties とします。
設定内容は以下の通り。
 #JDBC接続情報
 jdbc.driverClassName=org.postgresql.Driver
 jdbc.url=jdbc:postgresql://hostname/dbname (ここは各自の環境に合わせてください)
 jdbc.username=dbuser (ここも各自の環境に合わせてください)
 jdbc.password=password (ここも各自の環境に合わせてください)
 jdbc.maxidle=5 (状況に合わせて要調整)
 jdbc.minidle=3 (状況に合わせて要調整)
 jdbc.initialSize=5 (状況に合わせて要調整)
 jdbc.defaultAutoCommit=false (状況に合わせて要調整)

 #Mybatis設定情報
 mybatis.config=classpath:config/mybatis-config.xml (お好みで)
 mybatis.mapperlocation=classpath:mappers/*.xml (お好みで)
 mybatis.typealiases=jp.dip.arimodoki.model.dto (このサンプルの例)

次に、これは必須ではないのですが、一応Mybatisの設定情報(らしいので)
これも置いておきます。
main/resources/config/mybatis-config.xml
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
 <configuration>
  <settings>
  <setting name="mapUnderscoreToCamelCase" value="true" />
  <setting name="defaultFetchSize" value="100" />
  <setting name="defaultStatementTimeout" value="30" />
  </settings>
 </configuration>

外部ファイルは以上です。
次に、これらの設定ファイルを読み込んで、Mybatisを初期化するクラスを作成します。
src/main/java/jp/dip/arimodoki/config/MybatisConfig.java

大して難しいことはやってないので、ソースを読んでもらえれば理解できると思います。
@Configurationアノテーションにより、アプリケーション起動時にDIコンテナに登録されます。
以上で、Mybatis を使用するための前準備は整いました。
試しに、アプリケーションを起動してみましょう。
 ※)ただし、application.propertiesで指定したDBがきちんと存在する事!
Eclipseのコンソールビューに起動ログが出力されます。
変なエラーが出力されなければ、DBの接続は成功していると思って大丈夫です。

次節では、具体的な XMLマッパーを使ってDBを呼び出してみたいと思います。
最後になりましたが、引用させていただいたURL:
ConcreePage.com
SpringBoot(SPA)+MyBatis+RDBMS(PostgreSQL)