Mybatis实现一对一、一对多关联查询的方法(示例详解)

Mybatis实现一对一、一对多关联查询,关联查询:多个表联合查询,只查询一次,通过resultMap里面的标签配置一对一、一对多。

涉及的sql文件、idea工程文件:Mybatis实现一对一、一对多关联查询资源

本篇文章涉及的一对一、一对多关系

  • 班级classes、班主任teacher是一对一的关系
  • 班级classes、学生student是一对多的关系

Mybatis实现一对一、一对多关联查询的方法(示例详解)_第1张图片

使用IDEA快速构建一个MyBatis工程

Mybatis实现一对一、一对多关联查询的方法(示例详解)_第2张图片

pom.xml



    4.0.0

    com
    sun
    1.0-SNAPSHOT
    mybatisTest

    
        UTF-8
        1.8
        1.8
        5.8.2
    

    
        
            org.mybatis
            mybatis
            3.2.2
        
        
            mysql
            mysql-connector-java
            8.0.30
        
        
            org.projectlombok
            lombok
            1.18.24
        
        
            log4j
            log4j
            1.2.17
        
        
            org.apache.logging.log4j
            log4j-core
            2.13.3
        
        
            org.junit.jupiter
            junit-jupiter-api
            ${junit.version}
            test
        
        
            org.junit.jupiter
            junit-jupiter-engine
            ${junit.version}
            test
        
        
            junit
            junit
            4.13.2
            test
        
    
    
        
            
                
                src/main/java
                
                    
                    
                    **/*.properties
                    **/*.xml
                
                
                false
            
            
                src/main/resources
            
        
    


mybatis-config.xml






    
    

    
    
        
    

    
        
            
            
            
            
                
                
                
                
            
        
    

    
    
        
    


database.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
user=root
password=root

MybatisUtil.java

package com.sun.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

/**
 * @author JumperSun
 * @date 2023-03-26-14:46
 */
public class MyBatisUtil {
    private static SqlSessionFactory factory;

    static {
        try {
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            factory = new SqlSessionFactoryBuilder().build(is);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static SqlSession createSqlSession(){
        return factory.openSession(false); // true为自动提交事务
    }

    public static void closeSqlSession(SqlSession sqlSession){
        if(null != sqlSession)
            sqlSession.close();
    }
}

Teacher.java

package com.sun.pojo;

import lombok.Data;

/**
 * @author JumperSun
 * @date 2023-03-26-14:51
 */
@Data
public class Teacher {
    private int id;
    private String name;
}

Student.java

package com.sun.pojo;

import lombok.Data;

/**
 * @author JumperSun
 * @date 2023-03-26-14:53
 */
@Data
public class Student {
    private int id;
    private String name;
}

Classes.java

package com.sun.pojo;

import lombok.Data;

import java.util.List;

/**
 * @author JumperSun
 * @date 2023-03-26-14:52
 */
@Data
public class Classes {
    private int id;
    private String name;
    private Teacher teacher;
    private List studentList;
}

classMapper.java

package com.sun.mapper;

import com.sun.pojo.Classes;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author JumperSun
 * @date 2023-03-26-14:54
 */
public interface ClassesMapper {
    List getClassesTeacher(@Param("id") int id);

    List getClassesTeacherStudentList(@Param("id") int id);
}

classMapper.xml





    
    

    
        
        
        
        
            
            
        
    

    
    

    
        
        
        
            
            
        
        
            
            
        
    



MapperTest.java

import com.sun.mapper.ClassesMapper;
import com.sun.pojo.Classes;
import com.sun.utils.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

/**
 * @author JumperSun
 * @date 2023-03-26-15:10
 */
public class MapperTest {
    /**
     * 测试班级与班主任老师一对一的关联关系
     */
    @Test
    public void test1() {
        SqlSession sqlSession = MyBatisUtil.createSqlSession();
        ClassesMapper classesMapper = sqlSession.getMapper(ClassesMapper.class);
        List classes = classesMapper.getClassesTeacher(1);
        for (Classes Classes : classes) {
            System.out.println(classes);
        }

    }

    /**
     * 测试班级与学生一对多关联关系
     */
    @Test
    public void test2() {
        SqlSession sqlSession = MyBatisUtil.createSqlSession();
        ClassesMapper classesMapper = sqlSession.getMapper(ClassesMapper.class);
        List classes = classesMapper.getClassesTeacherStudentList(1);
        for (Classes Classes : classes) {
            System.out.println(classes);
        }

    }
}

test1:

Mybatis实现一对一、一对多关联查询的方法(示例详解)_第3张图片

test2:

Mybatis实现一对一、一对多关联查询的方法(示例详解)_第4张图片

总结:一对一关联查询需要在resultMap里面配置association,一对多关联查询需要在resultMap里面配置collection;

List classes = classesMapper.getClassesTeacherStudentList(1);
for (Classes Classes : classes) {
System.out.println(classes);
}}

}
test1:
[外链图片转存中...(img-qon5qYiR-1680248446105)]
test2:
[外链图片转存中...(img-DZayGx8q-1680248446107)]
总结:一对一关联查询需要在resultMap里面配置association,一对多关联查询需要在resultMap里面配置collection;

到此这篇关于Mybatis实现一对一、一对多关联查询的方法(示例详解)的文章就介绍到这了,更多相关Mybatis关联查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

你可能感兴趣的:(Mybatis实现一对一、一对多关联查询的方法(示例详解))