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付きで一覧が取得できる