天天看點

多對多級聯操作

關聯關系中多對多:

                           一個對象對應着另一個表的多個資料,是以多對多都是用集合來封裝

                           之是以用集合是因為,因為一個表的對象對應另一個表的多個對象是以用集合

一、聯查:

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>