關聯關系中多對多:
一個對象對應着另一個表的多個資料,是以多對多都是用集合來封裝
之是以用集合是因為,因為一個表的對象對應另一個表的多個對象是以用集合
一、聯查:
public class kecheng {
//課程對象
private Integer kid;
private String kname;
private List<stu> stuList;
}
public class stu {
//學生對象
private Integer sid;
private String address;
private List<kecheng> kechengs;
}
課程聯查表
public List<kecheng>seleKc1();//之是以用集合是因為這個對象對應着另一個表的多個對象
<resultMap id="sestuandkc" type="com.dao.stu">
<id column="sid" property="sid"/>
<result column="address" property="address"/>
<collection property="kechengs" ofType="com.dao.kecheng">
<!--注意這裡的類型選擇是ofType-->
<id column="kid" property="kid"/>
<result column="kname" property="kname"/>
</collection>
</resultMap>
<select id="select" resultMap="sestuandkc">
SELECT s.*,k.* FROM stu s
-- 三表聯查
INNER JOIN kecheng k
INNER JOIN kcandstu kc
ON kc.sid=s.sid AND kc.kid=k.kid
-- 關系表 所對應的id
</select>
第二種懶加載查詢:
stu學生實作類:
public List<stu> selectsut(int id);
查詢有多少學生對象
<select id="selectsut" resultType="com.dao.stu">
SELECT *FROM stu WHERE sid in (SELECT sid FROM kcandstu WHERE sid=#{param1})
-- 這裡的嵌套查詢要用in不要用=号因為對應的是多個對象
-- 查詢出有多少個所對應的學生類
</select>
查詢課程并經學生類帶出來
<resultMap id="selekecheng" type="com.dao.kecheng">
<id column="kid" property="kid"/>
<result column="cname" property="name"/>
<collection property="stuList" column="sid" select="com.dao.Stumap.selectsut">
<!--這裡column="sid"對應的是資料庫的列,通過對應的列來查詢出跟課程有關的對象-->
<!--com.dao.Stumap.selectsut,對應的是學生類中的方法-->
<id column="sid" property="sid"/>
<result column="address" property="address"/>
</collection>
</resultMap>
這裡是聯查出來的結果,通過實作類将查詢對象封裝入對應資料庫的java對象中
<select id="seleKc1" resultMap="selekecheng">
SELECT k.*,s.* FROM kecheng k
INNER JOIN stu s
INNER JOIN kcandstu kc
-- 三表聯查
ON kc.sid=s.sid AND kc.kid=k.kid
-- 關系表 所對應的id
</select>