mybatis 一对多查询

第一步 搭建运行环境 

参考 mybatis 多对一查询的两种实现方式

 

第二步 编写代码 

1、创建实体类Teacher和Student,一个老师给多个学生上课,一对多关系

Student 

复制代码
package com.xiahui.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private int id;
    private String name;
    private int tid;
}
复制代码

Teacher

复制代码
package com.xiahui.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher {
    private int id;
    private String name;
    private List<Student> students;
}
复制代码

2、创建Mapper接口

TeacherMapper

package com.xiahui.dao;

import com.xiahui.pojo.Teacher;

public interface TeacherMapper {
    Teacher getTeacher(int id);
}

3、创建Mapper.xml文件

与多对一类似,一对多也有两种查询方式:查询嵌套,结果嵌套。查询嵌套的实现比较复杂,这里只给出结果嵌套的实现方式(偷懒~)。

 

TeacherMapper.xml 

复制代码
<?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.xiahui.dao.TeacherMapper">
    <select id="getTeacher" resultMap="teacherWithStudents">
        select * from teacher, student where teacher.id=student.tid and teacher.id=#{id}
    </select>
    <resultMap id="teacherWithStudents" type="Teacher">
        <result column="id" property="id" />
        <result column="name" property="name"/>
        <collection property="students" javaType="ArrayList" ofType="Student">
            <result column="id" property="id"/>
            <result column="name" property="name"/>
        </collection>
    </resultMap>
</mapper>
复制代码

4、在MyBatis的核心配置文件中注册Mapper接口或其xml文件

在 mybatis-config.xml <configuration></configuration>标签内配置

<mappers>
      <mapper resource="com/xiahui/dao/TeacherMapper.xml"/>
</mappers>

 

第三步 测试

复制代码
package com.xiahui.dao;

import com.xiahui.pojo.Student;
import com.xiahui.pojo.Teacher;
import com.xiahui.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class TeacherTest {
@Test
public void getTeacher(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
Teacher teacher = mapper.getTeacher(1);
System.out.println(teacher);
sqlSession.close();
}
}
复制代码

 

小结:

1、association 关联 应用于 多对一

2、collection 集合 应用于 一对多

3、javaType 指定实体类中属性的类型

      ofType 指定映射到集合中的pojo类型,泛型的约束类型。

参考 https://www.bilibili.com/video/BV1NE411Q7Nx?p=21

posted @   Fabulous~  阅读(413)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示