我是靠谱客的博主 烂漫耳机,这篇文章主要介绍【 MyBatis 】一对多查询,用最简单的例子教你如何实现一对多查询创建两个实体类创建接口编写接口对应的xml文件编写核心配置文件测试,现在分享给大家,希望可以做个参考。
什么是一对多查询?
就是当我们查询老师时,会同时将老师关联的学生一同查出来,这就是一对多查询
比如,学生表中的tid则对应老师表中的id,如果我们使用一对多查询,查询id为1的老师,则学生表中tid为1的学生也会一同查出
以下使用代码实际验证一下
创建两个实体类
学生类
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50package com.robot.pojo; public class Student { private int id; private String name; private int tid; public Student() { } public Student(int id, String name, int tid) { this.id = id; this.name = name; this.tid = tid; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getTid() { return tid; } public void setTid(int tid) { this.tid = tid; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + ''' + ", tid=" + tid + '}'; } }
老师类,因为一个老师对应多个学生,所以老师中有学生列表的属性
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52package com.robot.pojo; import java.util.List; public class Teacher { private int id; private String name; private List<Student> students; public Teacher() { } public Teacher(int id, String name, List<Student> students) { this.id = id; this.name = name; this.students = students; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; } @Override public String toString() { return "Teacher{" + "id=" + id + ", name='" + name + ''' + ", students=" + students + '}'; } }
创建接口
创建一个老师的接口,实现根据ID查询指定老师
复制代码
1
2
3
4
5
6
7
8
9
10package com.robot.dao; import com.robot.pojo.Teacher; import org.apache.ibatis.annotations.Param; public interface TeacherMapper { Teacher getTeacher(@Param("tid") int id); }
因为是直接查询老师,然后根据老师的信息来查出学生,没有直接去查询学生,所以不用编写查询学生的方法
编写接口对应的xml文件
因为根据老师ID查询出的学生是多个,所以用集合标签< collection >
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.robot.dao.TeacherMapper"> <select id="getTeacher" resultMap="TeacherToStudent"> select s.id sid, s.name sname, t.id tid, t.name tname from teacher t, student s where t.id=#{tid} and t.id = s.tid </select> <resultMap id="TeacherToStudent" type="teacher"> <result property="id" column="tid"/> <result property="name" column="tname"/> <collection property="students" ofType="student"> <result property="id" column="sid"/> <result property="name" column="sname"/> <result property="tid" column="tid"/> </collection> </resultMap> </mapper>
编写核心配置文件
复制代码
1
2
3
4<mappers> <mapper resource="com/robot/dao/TeacherMapper.xml"/> </mappers>
测试
复制代码
1
2
3
4
5
6
7
8
9@Test public void getTeacherTest() { SqlSession sqlSession = MybatisUtils.getSqlSession(); TeacherMapper teacherMapper = sqlSession.getMapper(TeacherMapper.class); Teacher teacher = teacherMapper.getTeacher(1); System.out.println(teacher); sqlSession.close(); }
结果如下
由以上结果可以看到,查出了id=1的老师信息,而和老师关联的学生也都被查了出来(就是tid=1的学生)
最后
以上就是烂漫耳机最近收集整理的关于【 MyBatis 】一对多查询,用最简单的例子教你如何实现一对多查询创建两个实体类创建接口编写接口对应的xml文件编写核心配置文件测试的全部内容,更多相关【内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复