• ベストアンサー

Beanの連携(?)について質問です

Beanの連携(?)について質問です 例えば 社員名テーブルと給与テーブルがあったとします。 社員名テーブルと給与テーブルは社員コードでつながっているとします。 社員テーブルへのデータ取得・登録・削除などを行うEmployeeBeanクラスと 給与テーブルへのデータ取得・登録・削除などを行うPaymentBeanクラスがあります。 つまりそれぞれのBeanにはセッター、ゲッター、メソッドがあるということです。 画面からは社員一覧・登録・変更・削除ができます。 給与テーブルも給与一覧・登録・変更・削除ができます。 共通するメソッド(一覧・登録・変更など)もありますが、共通しないメソッド(検索など)もあります 「社員テーブルと給与テーブルを社員コードでつなげた一覧」を表示する場合はどうすれば よいかで詰まってしまいました。 「社員テーブルと給与テーブルを社員コードでつなげた一覧」を取得するBeanクラスを 作ればできたのですが・・・・EmployeeBeanとPaymentBeanのプロパティ、セッター、ゲッターを このBeanクラスでも定義しないといけないのはなんとも芸がないといいますか… どうすればスマートなソースになるのかご指導お願いします!!

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

>社員テーブルと給与テーブルが1対多の関係で >HashMapのキーをどうしようかなぁと思ったのです。 ということは 給与テーブルが 社員コード 給与ID 社員A   01 社員A   02 社員A   03 社員B   01 社員B   02 社員B   03 の様になっているのですよね? 以下なっているという仮定で。 であれば、給与テーブルのデータは1行をHashMapに入れて、それをArrayListやVectorに格納して、それをさらにHashMapにセットするというのはどうでしょう? (ややこしいですね。(^^;A) 社員データのHashMap キー     値 社員コード  12345 名前     ほげ ほげお 給与テーブル 給与テーブル各行を格納したArrayList … 給与テーブルの各行を格納したArrayList 0:給与IDが01の行 1:給与IDが02の行 … というような感じでデータを格納してはいかがでしょうか? 少しでも参考になれば。 >HashMapは同一キーは上書きでオブジェクトが登録されるのですよね? はい。ですので、社員名テーブルと給与テーブルが1対1の関係で、同じキー名(カラム名)で「意味の違う内容」であった場合にキー名を変えないといけないのでは?という意味でした。

hinata_0103
質問者

お礼

社員テーブルのデータをArrayListで取得し JSP内で<core:forEach>で順に表示し HashMapに格納した給与テーブルをキー[社員コード_連番(01,02,03・・・)]で取得し表示する。 で無事表示できました。 JSP内もそんなにゴチャゴチャせず、クラスも増えず 給与クラスにHashMapでデータを取得するメソッドを 1つ追加するだけという、シンプルでGoodです!! pcbeginnerさんご指導ありがとうございました!!

その他の回答 (5)

回答No.5

#2です。 いっそのことBeanは各テーブルへのアクセスだけに専念させて、中身のデータはMapなどに格納してやりとりしてはどうでしょう??? 各Beanに新たに public HashMap getMap()  新しくHashMapを生成して、そのHashMapに持っているデータをセットして返す。 public HashMap getMap(HashMap map)  引数で渡されたHashMapに持っているデータをセットして返す。(同じキー名があった場合の考慮を忘れずに) な感じのメソッドを実装してみるとか。 いかがでしょう???

hinata_0103
質問者

補足

今No4.のhanazawa-loveさんの形で試しているところですがなかなかうまくいかなくて・・ っていうかプロパティをセットするの面倒だなぁと・・ それにテーブルを結合するたびにクラスを作るのも管理が増えるかなぁと思いまして HashMapに格納する方法は考えたんですヨ でも社員テーブルと給与テーブルが1対多の関係で HashMapのキーをどうしようかなぁと思ったのです。 でも今考えたら 給与テーブルのキーが社員CDと給与IDとした場合 給与IDは01,02,03・・・とほぼ固定なので HashMapのキーに社員CD_給与IDとかしてしまう方法もありですね・・・ HashMap(社員CD_給与ID, 給与クラスのインスタンス) ッて感じでしょうか!? 勉強不足ですみませんが 「同じキー名があった場合の考慮を忘れずに」とは具体的にはどういことでしょう? HashMapは同一キーは上書きでオブジェクトが登録されるのですよね?

回答No.4

オレはそーゆー場合は SQLで社員テーブルと給与テーブルをつなげたデータを持ってきて、そいつを新しいクラスに持たせてます。 そんで画面で表示させると。 他の回答にあるように現在あるクラスを利用するのもありとは思うんですが、 画面のソースがわかりにくくなるんじゃねぇかと。

hinata_0103
質問者

お礼

ご指導ありがとうございました。 画面のソースがわかりにくくなるようでしたら、 また新たにクラスを作る方法も今後の参考にさせていただきます。。

回答No.3

ごめんなさい、質問の内容を読んでいるうちに頭が混乱しました… 要は社員テーブルと給与テーブルの二つを繋げた一覧を取得する場合はどうするかですよね? 私は昔に似たようなのを作りましたが、その時は二つのクラスを同時に扱いました。 社員コードはどっちも同じなわけだから問題なく作動するはずです、新しくクラスを作る必要はありません。 試してないけどArrayListに二つのクラスが格納されているなら 給与 キュウヨ = (給与)キュウヨリスト.get(シャイン.get社員コード); みたいな感じで扱えば問題ないと思いますけど、どうかな? もちろん、この場合は二つのクラスを扱うのでArrayListなどに格納する順番などは同一にしなければなりません、 私の場合は社員クラスと給与クラスを作ってデータベースにアクセスする専用のBeanで実現しました。 ただ二つのクラスを同時に扱うのでロジック的にはどうかと思うけど… ちなみにデータベースから値を受ける時は同じ条件で検索とかして それぞれのクラスで受け取るのではなく、JOINとかして一気に取得した方がいいですよ☆ 取得したデータを格納する時だけ二つのクラスに分けましょう☆ それが一番手っ取り早いと思います♪ 何やら答えてて訳が判らなくなった(汗 質問の意図や内容、答えを取り間違ってたらごめんなさいm(_ _)m

hinata_0103
質問者

お礼

ご指導ありがとうございました。 今後の参考にさせていただきます!!

回答No.2

>「社員テーブルと給与テーブルを社員コードでつなげた一覧」を表示する場合… は EmployeeBeanクラス と PaymentBeanクラス を2つ渡せばいいのでは? 2つのBeanをリクエストにセットして、画面側で2つのBeanを使えないのかな? それか、社員名テーブルと給与テーブルを合わせたBeanを作るとか。 その場合、登録、削除する場合のチェックがちょっと複雑になるかもしれませんが。

回答No.1

こんにちは。 うーん・・・、よくわかりませんが、 新しいクラスを一つ作って、両方のインスタンスを持たせればいいんじゃないでしょうか・・・? クラス.インスタンス(どっちかのBean).get(set) でいいのでは? (^^ゞ

hinata_0103
質問者

お礼

ご指導ありがとうございました。

関連するQ&A