Mybatis---关联查询

目录

一、一对一关联查询

(1)持久层接口方法

(2)映射文件

(3)测试方法

二、一对多关联查询

(1)持久层接口方法

(2)映射文件

(3)测试方法

三、多对多查询

(1)持久层接口方法

(2)映射文件

(3)测试方法


一、一对一关联查询

(1)持久层接口方法

public interface StudentMapper {
    List<Student> findAll();
}

(2)映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gq.mapper.StudentMapper">
   <resultMap id="findMap" type="com.gq.pojo.Student">
      <id property="sid" column="sid"></id>
      <result property="sex" column="sex"></result>
      <result property="name" column="name"></result>
      <association property="classes" column="classId" javaType="com.gq.pojo.Classes">
         <id property="cid" column="cid"></id>
         <result property="className" column="className"></result>
      </association>
   </resultMap>
   <select id="findAll" resultMap="findMap">
      select *from student left join classes on student.classId=classes.cid
   </select>
</mapper>

(3)测试方法

 @Test
    public void yiduiyiTest() throws Exception{
        InputStream is= Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory=sqlSessionFactoryBuilder.build(is);
        SqlSession session=sqlSessionFactory.openSession();
        StudentMapper studentMapper=session.getMapper(StudentMapper.class);
        List<Student> studentList=studentMapper.findAll();
        studentList.forEach(System.out::println);
        session.commit();
        session.close();
        is.close();
    }

二、一对多关联查询

查询班级时,将关联的学生也查出来,这就是一对多关联查询

(1)持久层接口方法

public interface StudentMapper {
    //查询班级,关联查询出学生
    List<Classes> findClassesAll();
}

(2)映射文件

   <resultMap id="ClassMap" type="com.gq.pojo.Classes">
      <id property="cid" column="cid"></id>
      <result property="className" column="className"></result>
<!-- proprty是属性名,column是关联列名,oftype:集合的泛型-->
      <collection property="studentList" column="classId" ofType="com.gq.pojo.Student">
         <id property="sid" column="sid"></id>
         <result property="name" column="name"></result>
         <result property="sex" column="sex"></result>
      </collection>
    </resultMap>
 <select id="findClassesAll" resultMap="ClassMap">
    select *from classes left join student on student.classId=classes.cid
 </select>

(3)测试方法

@Test
    public void YiDuiDuoTest() throws Exception {
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        SqlSession session = sqlSessionFactory.openSession();
        StudentMapper studentMapper = session.getMapper(StudentMapper.class);
        List<Classes> classes=studentMapper.findClassesAll();
        classes.forEach(System.out::println);
        session.commit();
        session.close();
        is.close();
    }

三、多对多查询

多对多关联查询实际上就是两个一对多查询。

比如说:

一个老师对应多个班级,也就是说老师类中有一个班级集合属性

一个班级对应多个老师,也就是班级类中有一个老师集合属性

(1)持久层接口方法

 查询老师时,会将关联的班级也查询出来。

public interface TeacherMapper {
    List<Teacher> findTeacherAll();
}

(2)映射文件

    <resultMap id="TeacherMap" type="com.gq.pojo.Teacher">
        <id property="tid" column="tid"></id>
        <result property="tname" column="tname"></result>
        <collection property="classes" column="tid" ofType="com.gq.pojo.Classes">
            <id property="cid" column="cid"></id>
            <result property="className" column="className"></result>
        </collection>
    </resultMap>
    <select id="findTeacherAll" resultMap="TeacherMap">
        select *from teacher
            left join classes_teacher on teacher.tid=classes_teacher.tid
            left join classes on classes.cid=classes_teacher.cid
    </select>

(3)测试方法

    @Test
    public void Test1() throws Exception {
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        SqlSession session = sqlSessionFactory.openSession();
        TeacherMapper teacherMapper=session.getMapper(TeacherMapper.class);
        List<Teacher> teachers=teacherMapper.findTeacherAll();
        teachers.forEach(System.out::println);
        session.commit();
        session.close();
        is.close();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜到极致就是渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值