多对多级联操作

简介: 关联关系中多对多:                            一个对象对应着另一个表的多个数据,所以多对多都是用集合来封装                            之所以用集合是因为,因为一个表的对象对应另一个表的多个对象所以用集合 一、联查:  public class.
关联关系中多对多:
                           一个对象对应着另一个表的多个数据,所以多对多都是用集合来封装
                           之所以用集合是因为,因为一个表的对象对应另一个表的多个对象所以用集合
一、联查:
 
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>


目录
相关文章
|
1月前
|
XML Java 数据库连接
一对多 嵌套查询
一对多 嵌套查询
|
安全 数据库
通过E-R理解 主键和外键的关系
实例 现有课程和教师两个实体,课程实体的属性有课程名称、课程编号、课程属性、考试类型;教师实体的属性包括姓名、工号、职称;一门课程可以有多个教师,且每一位教师可以教授多门课程。教师每教授一门课有课序号。
3683 1
通过E-R理解 主键和外键的关系
|
6月前
|
SQL XML 数据格式
mybatis-关联关系&一对多关联&多对一关联&多对多
mybatis-关联关系&一对多关联&多对一关联&多对多
|
7月前
|
C语言
一对多表操作
一对多表操作
43 0
|
Java 数据库连接 关系型数据库
|
Java 数据库连接 关系型数据库
|
Java 数据库连接 关系型数据库
|
Java 关系型数据库 数据库连接