MyBatis resultmap结果映射

创建数据库和实体类

首先创建数据库student和teacher,并且每个学生对应一个老师,一个老师可以对应多个学生,数据库如下图:

 

 创建实体类Student

复制代码
 1 package com.loubin.pojo;
 2 
 3 public class Student {
 4     private int id;
 5     private String name;
 6 
 7     Teacher teacher;
 8 
 9     @Override
10     public String toString() {
11         return "Student{" +
12                 "id=" + id +
13                 ", name='" + name + '\'' +
14                 ", teacher=" + teacher +
15                 '}';
16     }
17 
18     public Teacher getTeacher() {
19         return teacher;
20     }
21 
22     public void setTeacher(Teacher teacher) {
23         this.teacher = teacher;
24     }
25 
26     public int getId() {
27         return id;
28     }
29 
30     public void setId(int id) {
31         this.id = id;
32     }
33 
34     public String getName() {
35         return name;
36     }
37 
38     public void setName(String name) {
39         this.name = name;
40     }
41 }
复制代码

 

创建实体类Teacher

复制代码
 1 package com.loubin.pojo;
 2 
 3 import java.util.List;
 4 
 5 public class Teacher {
 6     private int id;
 7     private String name;
 8 
 9     List<Student> students;
10 
11     public List<Student> getStudents() {
12         return students;
13     }
14 
15     @Override
16     public String toString() {
17         return "Teacher{" +
18                 "id=" + id +
19                 ", name='" + name + '\'' +
20                 ", students=" + students +
21                 '}';
22     }
23 
24     public void setStudents(List<Student> students) {
25         this.students = students;
26     }
27 
28     public int getId() {
29         return id;
30     }
31 
32     public void setId(int id) {
33         this.id = id;
34     }
35 
36     public String getName() {
37         return name;
38     }
39 
40     public void setName(String name) {
41         this.name = name;
42     }
43 
44     public Teacher(int id, String name) {
45         this.id = id;
46         this.name = name;
47     }
48 }
复制代码

 

一对多查询

Student类中除了基本类型id和name之外,还有一个自定义类teacher,所以在进行查询的时候,需要对查询到的结果进行映射处理,将查到的字段映射为对象teacher

在接口StudenMapper中定义getStudentById的方法,如下所示

复制代码
package com.loubin.dao;

import com.loubin.pojo.Student;
import org.apache.ibatis.annotations.Param;

public interface StudentMapper {


    Student getStudentById(int id);
}
复制代码

对应的映射文件StudentMapper.xm如下所示,其中使用了resultMap标签对结果进行映射,由于student对象中的属性teacher是类Teacher的对象,所以需要使用association标签进行映射

复制代码
<?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.loubin.dao.StudentMapper">
    <resultMap id="studentMap" type="com.loubin.pojo.Student">
        <result column="sid" property="id"/>
        <result column="sname" property="name"/>
        <association property="teacher" javaType="teacher">
            <result property="id" column="tid"/>
            <result property="name" column="tname"/>
        </association>
    </resultMap>

    <select id="getStudentById"  resultMap="studentMap">
        select s.id  sid, s.name  sname, t.id tid, t.name tname from student as s, teacher as t WHERE s.tid = t.id and s.id = #{id};
    </select>
</mapper>
复制代码

 

查询得到的结果如下

 

多对一查询

在类Teacher中有属性students,该属性是类Student的集合,所以需要使用resultMap中的collection标签进行映射,如下所示,创建接口TeacherMapper

package com.loubin.dao;

import com.loubin.pojo.Teacher;
import org.apache.ibatis.annotations.Param;

public interface TeacherMapper {
    Teacher getTeacherById(@Param("id") int id);
}

对应的映射文件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.loubin.dao.TeacherMapper">
    <resultMap id="teacherMap" type="teacher">
        <result column="tid" property="id"/>
        <result column="tname" property="name"/>
        <collection property="students" ofType="student">
            <result column="sid" property="id"/>
            <result column="sname" property="name"/>
        </collection>
    </resultMap>
    <select id="getTeacherById"  resultMap="teacherMap">
        select s.id  sid, s.name  sname,  t.id tid, t.name tname from student as s, teacher as t WHERE s.tid = t.id and t.id = #{id};
    </select>
</mapper>
复制代码

查询得到的结果如下

 

posted @   地球上最后一个直男  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示