我是靠谱客的博主 自觉篮球,这篇文章主要介绍Mybatis的多对一与一对多查询 Mapper.xml 讲解Mybatis、谢谢观看~,现在分享给大家,希望可以做个参考。

文章目录

  • 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、学生表:
student表
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
7
public 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>

过程分析:

  1. 书写select 标签:指定id,这里使用结果集(StudentTeacher)处理
  2. 定义结果集:实体类相同的属性可不写,复杂的属性,我们需要使用association
  3. 定义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
7
public 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>

过程分析:

  1. 书写select 标签:指定id,这里使用结果集(TeacherStudent)处理
  2. 定义结果集:实体类相同的属性可不写,复杂的属性,我们需要使用collection
  3. 定义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>

过程分析:

  1. 书写select 标签:指定id,这里使用结果集(TeacherStudent)处理
  2. 定义结果集:实体类相同的属性可不写,复杂的属性,我们需要使用collection
  3. 定义collection的结果集映射:自定义select属性(子查询方法)
    具体与association相似

谢谢观看~

~写完了哦 有错误请通知我呢~

最后

以上就是自觉篮球最近收集整理的关于Mybatis的多对一与一对多查询 Mapper.xml 讲解Mybatis、谢谢观看~的全部内容,更多相关Mybatis的多对一与一对多查询内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(81)

评论列表共有 0 条评论

立即
投稿
返回
顶部