Mybatis实现一对一、一对多关联查询,关联查询:多个表联合查询,只查询一次,通过resultMap里面的、标签配置一对一、一对多。
涉及的sql文件、idea工程文件:Mybatis实现一对一、一对多关联查询资源
本篇文章涉及的一对一、一对多关系
(资料图片)
使用IDEA快速构建一个MyBatis工程
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:
test2:
总结:一对一关联查询需要在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关联查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!


全国首份《家庭教育令》来了!督促家长“依法带娃”