iBatisでの1対多のテーブルからのデータ取得

iBatisで駆動表と1対多の関係にあるテーブルから同時にデータを取得してみる

素直な実装では次のよう
データを格納するクラスでプロパティとしてList型をつくり

public class User {

        :	

	public static class History {
		String 	date;
		double	pay;
		public String getDate() {
			return date;
		}
		public void setDate(String date) {
			this.date = date;
		}
		public double getPay() {
			return pay;
		}
		public void setPay(double pay) {
			this.pay = pay;
		}
	}

	List<History> hist;

	public List<History> getHistory() {
		return hist;
	}
	public void setHistory(List<History> hist) {
		this.hist = hist;
	}

        :

resultMapでListのプロパティで副問い合わせ( select="getHist"部分 )を発行するようにする

  <resultMap id="hist" class="tutorial.User$History">
    <result property="date"         column="date"/>
    <result property="pay" 	        column="pay"/>
  </resultMap>

  <resultMap id="userlistWithHist" class="tutorial.User" >
    <result property="id" 	         column="id" />
    <result property="name" 	column="name" />
    <result property="password"     column="password" />
    <result property="salary"       column="salary" />
    <result property="history"      column="id"         select="getHist"/>
  </resultMap>

  <select id="getHist" resultMap="hist">
	SELECT date,pay
	  FROM history
	 WHERE id=#id#
  	 ORDER by date
  </select>

  <select id="getAllWithHist" resultMap="userlistWithHist">
	SELECT a.id, a.name, a.password, a.salary
	  FROM suser as a
  	 ORDER by a.id
  </select>

これで、getAllWithHistを呼べば、History付きで一覧が取得できる