概述
文章目录
- 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实体类
//@Data 是Lombok的注解 用来生成get、set、toString等方法
@Data
public class Student {
private int id;
private String name;
private Teacher teacher;
}
2.创建Teacher实体类
@Data
public class Teacher {
private int id;
private String name;
}
3.StudentMapper构建
public interface StudentMapper {
//查询所有学生信息
List<Student> getStudent();
List<Student> getStudent2();
}
4. StudentMapper.xml 讲解(只展示核心代码部分)
4.1 按照查询嵌套处理
<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. 根据查询出来的学生的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 按照结果嵌套处理
<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实体类
@Data
public class Student {
private int id;
private String name;
private int tid;
}
2. 创建Teacher实体类对象
@Data
public class Teacher {
private int id;
private String name;
private List<Student> students;
}
3. TeacherMapper构建
public interface TeacherMapper {
//用过id获取老师信息
Teacher getTeacher(@Param("tid") int id);
//用过id获取老师信息2
Teacher getTeacher2(@Param("tid") int id);
}
4. TeacherMapper.xml讲解(只展示核心代码部分)
4.1 按照结果嵌套处理
<!--按照结果嵌套处理-->
<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 按照查询嵌套处理
<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的多对一与一对多查询 Mapper.xml 讲解Mybatis、谢谢观看~所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复