多对一查询

多对一查询_第1张图片

 是这样的,首先学生表中有三个属性,前两个属性要出现在结果集中,第三个属性哦用于查找教师的名字,然后呢,用resultMap重新处理,将老师的名字重新对应为学生表的第三个属性。其实这样做有局限

多对一查询

SQL语句

SELECT s.id ,s.name,t.name from student s ,teacher t WHERE s.tid=t.id
  public List getStudent();

实现接口类

配置Mapper文件







 


    
    


    



    



实现原理就是 嵌套子查询

   @Test
    public void getStudent(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        List student = mapper.getStudent();
        for (Student a : student) {
            System.out.println(a);
        }


        sqlSession.close();

    }

只有一个参数时自动匹配,无论写啥都行

注意

第二种方法:结果嵌套处理

2。此处查询后输出3个字段,有两个字段基本同名,取别名区分

取别名可以不用AS

讲实话,真的要写的话,还是第一种更加适用,第二种只适合查询少量列的情况

即使只是写了三个查询都感觉到了这种方式过于麻烦了

其实:我自己的理解:

结果集嵌套就是 用SQL查出来的结果  通过resultMap  用别名   association 映射到 对象的属性里 通过输出对象,对象的属性也一一输出出来。

  //第二种方法,结果嵌套实现
   public List getStudent2();

    

      
               
               

          
              
              
          
      


  @Test
    public void getStudent2(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        List student = mapper.getStudent2();
        for (Student a : student) {
            System.out.println(a);
        }


        sqlSession.close();

    }

多对一查询_第2张图片

 子查询对应第一种方式

联表查询对应第二种方式

说白了

1.第一种方式:其实就是查询嵌套 查询出对象进入 主对象  

2.第二种方式:其实就是结果嵌套 进入对象

你可能感兴趣的:(mybatis,sql,mysql,数据库)