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

EclipseのMavenを使った、Spring-MVC、Thymeleaf、MyBatis 等のプログラミングテクニックを、
備忘録的に記録しています。実際に動くソースコードを多用して説明していますので、
これからEclipseや、Spring-MVCを始めたいと思っている人にとって、少しでも参考になれば幸いです。
■SpringMVC の小径 第8歩 あと一歩 DB連携
8-4)邂逅の頂
Mapper森林地帯を抜けて、やっと見晴らしの良い稜線に出ました。
今まで辿ってきた道のりを振り返ってみてください。
自分の住んでいる町が、はるか遠くに霞んで見えています。
尾根にはまだ少し雪が残っていますが、心地よい春風が稜線を吹き抜けていきます。
ここで少し休憩したら、今まで学んできた知識を全て出し切って、
いよいよ頂上目指して最後のアタックです。

ここからは、前節で説明していなかった、
コントローラからビジネスロジックを呼び出し、
ビジネスロジックから、Mapperインターフェースを呼び出す。
一気通貫、全線開通までの仕組みを説明します。
頂上はもう目の前です。

話の流れ上、まずビジネスロジックから説明します。
viewとコントローラの関係はすでにお話しした通り、
viewからのリクエストに応じて、適切にパラメータから
入力検証などを行い、適切なviewに送り返すことです。
パラメータの中身の処理は、ビジネスロジックに委任します。
コントローラとビジネスロジックの関係は、
コントローラからもらったパラメータを分析して
Mapperインターフェースを通して、DBからデータを取り出し
業務フローに従って冷静沈着に分析した結果を
コントローラに返却する処理を担います。

ここでのビジネスロジックの具体的な処理は、
コントローラからもらったパラメータを分析して
DBアクセスを行うMapperインタフェースを呼び出す処理を実装します。
src/main/java/jp/dip/arimodoki/blogic/BlUser.java

前節で作成した、Mapperインターフェース(UserMapper)を@AutowiredでDIします。
コントローラで受け取ったリクエストパラメータFormBeanをsetForm()で引き継ぎます。
dbProc()でDBの処理タイプを判定して、しかるべき処理を行います。
DBアクセスメソッドに、@Transactionalアノテーションを付加しておきます。
 このアノテーションを付加することでbegin transaction ~ commit/rollbakが自動的に行われます 。
各DB処理メソッドは、Mapperインターフェースで実施したDB操作の結果を
 ビジネスモデル(User)で受け取り、これをリクエストパラメータFormBeanに保管します。

次は、ビジネスロジッククラスのインターフェースファイル。
これは、Eclipseで自動出力するので特段説明の必要はないでしょう。
src/main/java/jp/dip/arimodoki/blogic/BlUserIf.java

 

そして、DBの検索結果のビジネスモデルを保管するリクエストパラメータFormBean。
これは、「7-2)入力チェック」で作成したクラスを修正してあります。
src/main/java/jp/dip/arimodoki/model/PromenadeForm.java

ビジネスモデル(User)プロパティが追加され、@AutowiredアノテーションでDIされます。
ビジネスロジックによりDBから取得されたデータは全てこのuserに保管されています。
以前までここに住んでいた、mynameなどのプロパティ達は、
ビジネスモデルの方に引っ越ししてしまったので、
このクラスは、だいぶスリムになりました。
今は、ビジネスモデルで扱わない画面からリクエストされる処理タイプなどの
属性などを管理します。

ここで一つ大事なこと。
ビジネスモデルのプロパティuserに、@Valid アノテーションが宣言されています。
これは、以前までここにあった、myname などのプロパティが、userに引っ越したため、
viewの入力検証を行う場合、userのプロパティも検証してくださいな
とSpring-MVCにお願いしている部分です。
これが無いと、userのプロパティに入力検証アノテーションを宣言しても、
検証が行われません。

 

で、お約束のFormBeanのインターフェース。

 

最後がコントローラ
これも、「7-2)入力チェック」で作成したPromenadeクラスを修正してあります。
src/main/java/jp/dip/arimodoki/cntl/Promenade.java

主な変更内容としては、
・ビジネスロジッククラス(BlUser)を、@AutowiredアノテーションでDIします。
・バインド処理メソッドsetupBind()で、リクエストパラメータFormBeanをビジネスロジックに継承します。
・コントローラメソッドpromenaderes()で、ビジネスロジックのDB処理dbProc()を呼び出します。

 

あぁ、あとひとつ忘れてました。
view側も少し修正が必要です。
これも、「7-2)入力チェック」で作成したpromenade.htmlを修正してあります。
WebContent/promenade.html

リクエストパラメータFormBeanのプロパティが、ビジネスモデル(User)に引っ越したため
view側も入力フィールド名が。user.xxxx のように変更されています。

で、実際DBの検索だとか、インサートとかアップデートとか動作の実例をお見せしようかとも考えましたが、
私も実は、それなりに歩き疲れて気力が無くなってきているし、
ここから先は、実際にDBのテーブルとかがないと、DBアクセスエラーでプログラムが動かないので
(ここで紹介しているプログラムは、実際動かして動作は確認してありますが)
これを今回の散歩のお土産というか、皆さんへの課題としたいと思います。
Java側、Mapper側は多分コントローラメソッドを必要に応じて少し追加するぐらいで動かせるはずです。
view側のHTMLは、それなりに改造/追加する必要があるでしょう。
これまでの経験で十分クリアできるレベルだと思うので、頑張ってみてください。

 

山の頂は晴れ渡り、絶景の展望を目の当たりにして心が澄みわたるような気分です。
見下ろせば、自分が歩いてきた道がはるかかなたの自分の町までくっきりと続いています。
途中、くじけそうになったこともありました。
足が痛くて、途中で引き返そうかと思うこともありましたが、
頑張って歩いた甲斐がありました。
雪解け水で煎れたコーヒーでも飲みながら、しばらく展望を楽しむことにしましょう。