myBatis-类型关联

Posted 土上方方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了myBatis-类型关联相关的知识,希望对你有一定的参考价值。

1.一对多 

collection
<resultMap id="deptsql" type="Dept">
    <id column="deptNo" property="deptNo"></id>
    <result column="deptName" property="deptName"/>
    <collection property="emps" ofType="Emp" select="selectby" column="deptNo"></collection>

</resultMap>
    <select id="selectby" resultType="Emp">
        SELECT *FROM emp WHERE deptNo=#{deptNo}
    </select>
    <select id="getEmpsByDeptNoS" resultMap="deptsql">
        SELECT deptNo,deptName
        from dept
        WHERE deptNo=#{deptNo}
    </select>

测试类
@Test
public void testOneToManys(){
SqlSession session= myBatis.getSqlSession();
IStudentInfoDao dao = session.getMapper(IStudentInfoDao.class);
Dept dept = dao.getEmpsByDeptNoS(5);
System.out.println(dept.getDeptName());
for (Emp emp:dept.getEmps()) {
System.out.println(emp.getEmpName());
}
session.close();
}

 2.多对一

<!--多对一-->
    <resultMap id="empMapper" type="Emp">
        <id column="empNo" property="empNo"></id>
        <result column="empName" property="empName"></result>
        <association property="dept" javaType="Dept">
            <id column="deptNo" property="deptNo"></id>
            <result column="deptName" property="deptName"></result>
        </association>
    </resultMap>
    <select id="getEmpNo" resultMap="empMapper">
        select dept.deptNo,deptName,empNo,empName
        from dept,emp
        where dept.deptNo=emp.deptNo
        and empNo=#{empNo}
    </select>

<!--多条件 多对一-->
<resultMap id="deptsqls" type="Emp">
    <id column="empNo" property="empNo"></id>
    <result column="empName" property="empName"></result>
    <association property="dept" javaType="Dept" select="selectbys" column="deptNo"></association>
</resultMap>
      <select id="selectbys" resultType="Dept">
          SELECT *FROM dept WHERE deptNo=#{deptNo}
        </select>
    <select id="getEmpNos" resultMap="deptsqls">
        SELECT  deptNo,empNo,empName
        from emp
        WHERE empNo=#{empNo}
    </select>

  3.自链接

<!--自链接-->
    <resultMap id="getCatery" type="Category">
        <id column="cid" property="cid"></id>
        <result column="cname" property="cname"></result>
        <result column="pid" property="pid"></result>
        <collection property="list" ofType="Category" select="getCate" column="cid"></collection>
    </resultMap>
    <select id="getCate" resultMap="getCatery">
        SELECT *FROM  category WHERE pid=#{pid}
    </select>

  4.多对多

 <resultMap id="sts" type="Teacher">
        <id column="tid" property="tid"></id>
        <result column="tname" property="tname"></result>
        <collection property="stus" ofType="Students">
            <id column="sid" property="sid"></id>
            <result column="sname" property="sname"></result>
        </collection>
    </resultMap>

    <select id="getts" resultMap="sts">
        SELECT  students.sid,sname,teacher.tid,tname FROM
        students,ts,teacher WHERE students.sid=ts.sid
        AND teacher.tid=ts.tid
        AND  teacher.tid=#{tid}
    </select>

测试类
//过呢根据老师编号查询对应学生
@Test
public void testtss(){
SqlSession session= myBatis.getSqlSession();
IStudentInfoDao dao = session.getMapper(IStudentInfoDao.class);
Teacher teacher=dao.getts(1);
System.out.println(teacher.getTname());
for (Students cate:teacher.getStus()
) {
System.out.println(cate.getSname());

}

session.close();
}

  

 





























以上是关于myBatis-类型关联的主要内容,如果未能解决你的问题,请参考以下文章

mybatis第二天——大纲待更新

myBatis-类型关联

mybatis如何实现一对多关联关系

MyBatis关联查询,表字段相同,resultMap映射问题的解决办法

mybatis中映射文件和实体类的关联性

MyBatis的关联查询