文章目录
- Mybatis、
- 一、数据库搭建
- 二、多对一查询
- **1.创建Student实体类**
- **2.创建Teacher实体类**
- **3.StudentMapper构建**
- **4. StudentMapper.xml 讲解(只展示核心代码部分)**
- **4.1 按照查询嵌套处理**
- **4.2 按照结果嵌套处理**
- 三、一对多
- 1. 创建Student实体类
- 2. 创建Teacher实体类对象
- 3. TeacherMapper构建
- 4. TeacherMapper.xml讲解(只展示核心代码部分)
- 4.1 按照结果嵌套处理
- 4.2 按照查询嵌套处理
- 谢谢观看~
Mybatis、
一、数据库搭建
1、学生表:
1、老师表:
二、多对一查询
1.创建Student实体类
复制代码
1
2
3
4
5
6
7
8//@Data 是Lombok的注解 用来生成get、set、toString等方法 @Data public class Student { private int id; private String name; private Teacher teacher; }
2.创建Teacher实体类
复制代码
1
2
3
4
5
6@Data public class Teacher { private int id; private String name; }
3.StudentMapper构建
复制代码
1
2
3
4
5
6
7public interface StudentMapper { //查询所有学生信息 List<Student> getStudent(); List<Student> getStudent2(); }
4. StudentMapper.xml 讲解(只展示核心代码部分)
4.1 按照查询嵌套处理
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14<select id="getStudent" resultMap="StudentTeacher"> select * from student; </select> <resultMap id="StudentTeacher" type="student"> <result property="id" column="id" /> <result property="name" column="name"/> <!--复杂的属性,我们需要单独出来 对象:association 集合:collection--> <association property="teacher" column="tid" javaType="teacher" select="getTeacher"/> </resultMap> <select id="getTeacher" resultType="teacher"> select * from teacher where id = #{tid}; </select>
复制代码
1
2
3
4
5
6<!-- 思路: 1. 查询所有的学生信息 2. 根据查询出来的学生的tid寻找特定的老师 (子查询) -->
过程分析:
- 书写select 标签:指定id,这里使用结果集(StudentTeacher)处理
- 定义结果集:实体类相同的属性可不写,复杂的属性,我们需要使用association ,定义association 的select属性
- 定义association 的select方法:根据查询出来的tid列名属性去嵌套一个子查询 通过tid去查询teacher姓名
Student实体类中的teacher属性是一个复杂类型 我们需要使用 association(关联)
association讲解:
association – 一个复杂类型的关联;许多结果将包装成这种类型
嵌套结果映射 – 关联可以是 resultMap 元素,或是对其它结果映射的引用
简单来说,就是可以使用association 去绑定一个复杂类型(在resultMap 结果集中嵌套使用)
属性:
-
property:实体类属性 这里是Student 的 teacher属性。
-
column:查询出来的列名 这里是 student表中的 tid 。
-
javaType:是指property的java类型(没有起别名的情况下需要写全路径)
-
select:嵌套的查询语句(自定义)。
小结: 先查询出student表中的所有数据 再通过student.tid的值书写子查询语句。
4.2 按照结果嵌套处理
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14<select id="getStudent2" resultMap="StudentTeacher2" > select s.id sid , s.name sname, t.name tname , t.id tid from student s,teacher t where s.tid=t.id </select> <resultMap id="StudentTeacher2" type="student" > <result property="id" column="sid"/> <result property="name" column="sname"/> <association property="teacher" javaType="teacher"> <result property="id" column="tid"/> <result property="name" column="tname"/> </association> </resultMap>
过程分析:
- 书写select 标签:指定id,这里使用结果集(StudentTeacher)处理
- 定义结果集:实体类相同的属性可不写,复杂的属性,我们需要使用association
- 定义association的结果集映射
小结:
直接通过sql语句的连表查询,查询出需要的值 进行结果集映射(这里sql已取别名)
这样association中只需要进行Student的teacher属性的结果集映射即可。
三、一对多
1. 创建Student实体类
复制代码
1
2
3
4
5
6
7@Data public class Student { private int id; private String name; private int tid; }
2. 创建Teacher实体类对象
复制代码
1
2
3
4
5
6
7@Data public class Teacher { private int id; private String name; private List<Student> students; }
3. TeacherMapper构建
复制代码
1
2
3
4
5
6
7public interface TeacherMapper { //用过id获取老师信息 Teacher getTeacher(@Param("tid") int id); //用过id获取老师信息2 Teacher getTeacher2(@Param("tid") int id); }
4. TeacherMapper.xml讲解(只展示核心代码部分)
4.1 按照结果嵌套处理
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<!--按照结果嵌套处理--> <select id="getTeacher" parameterType="int" resultMap="TeacherStudent" > SELECT s.id sid, s.name sname,t.name tname,t.id tid FROM student s, teacher t WHERE s.tid = t.id AND tid = #{tid} </select> <resultMap id="TeacherStudent" 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>
过程分析:
- 书写select 标签:指定id,这里使用结果集(TeacherStudent)处理
- 定义结果集:实体类相同的属性可不写,复杂的属性,我们需要使用collection
- 定义collection的结果集映射
collection属性:
- property:实体类属性 这里是Teacher的 students属性。
- ofType:泛型的信息的java类型
- javaType:是指property的java类型(这里是集合的java类 可不写)
4.2 按照查询嵌套处理
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13<select id="getTeacher2" parameterType="int" resultMap="TeacherStudent2" > select * from teacher where id = #{tid}; </select> <resultMap id="TeacherStudent2" type="teacher"> <result property="id" column="id"/> <result property="name" column="name"/> <collection property="students" column="id" javaType="ArrayList" ofType="student" select="getStudent"/> </resultMap> <select id="getStudent" parameterType="int" resultType="student"> select * from student where tid = #{tid}; </select>
过程分析:
- 书写select 标签:指定id,这里使用结果集(TeacherStudent)处理
- 定义结果集:实体类相同的属性可不写,复杂的属性,我们需要使用collection
- 定义collection的结果集映射:自定义select属性(子查询方法)
具体与association相似
谢谢观看~
~写完了哦 有错误请通知我呢~
最后
以上就是自觉篮球最近收集整理的关于Mybatis的多对一与一对多查询 Mapper.xml 讲解Mybatis、谢谢观看~的全部内容,更多相关Mybatis的多对一与一对多查询内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复