1、多对一处理
以老师学生为例:
多个学生对应一个老师
对应学生而言:多个学生关联一个老师【多对一】关联
对于老师而言:一个老师,有很多个学生【一对多】集合
对应的 S Q L SQL SQL
CREATE TABLE teacher
(
id
INT(10) NOT NULL,
name
VARCHAr(30) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=INNODB DEFAULT CHARSET=utf8
teacher
CREATE TABLE student
(
id
INT(10) NOT NULL,
name
VARCHAr(30) DEFAULT NULL,
tid
INT(10) DEFAULT NULL,
PRIMARY KEY (id
),
KEY fktid
(tid
),
CONSTRAINT fktid
FOREIGN KEY (tid
) REFERENCES teacher
(id
)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO student
(id
, name
, tid
) VALUES (‘1’, ‘小明’, ‘1’);
INSERT INTO student
(id
, name
, tid
) VALUES (‘2’, ‘小红’, ‘1’);
INSERT INTO student
(id
, name
, tid
) VALUES (‘3’, ‘小张’, ‘1’);
INSERT INTO student
(id
, name
, tid
) VALUES (‘4’, ‘小李’, ‘1’);
INSERT INTO student
(id
, name
, tid
) VALUES (‘5’, ‘小王’, ‘1’);
以上表为例:查询所有学生的信息以及对应的老师
搭建环境
导入 l o m b l o k lomblok lomblok
<dependency>
<groupid>org.projectlombok</groupid>
<artifactid>lombok</artifactid>
<version>1.18.24</version>
</dependency>
建立实体类
// 学生类
@Data@AllArgsConstructor@NoArgsConstructor
public class Student {
private int id;
private String name;
private Teacher teacher;
}
// 老师类
@Data@NoArgsConstructor@AllArgsConstructor
public class Teacher {
private int id;
private String name;
}
建立Mapper接口
public interface StudentMapper {
// 查询所有学生的信息,并且查询出对应的老师
public List getStudent();
}
建立 M a p p e r . x m l Mapper.xml Mapper.xml文件
<mappers>
<mapper class="com.fl.dao.StudentMapper">
</mapper></mappers>
按照查询嵌套处理
接口
public List getStudent();
m a p p e r . x m l mapper.xml mapper.xml配置
<select id=“getStudent” resultmap=“StudentTeacher”>
select * from myBatis.student;
</select>
注意此处
i
d
=
′
′
g
e
t
T
e
a
c
h
e
r
′
′
id=''getTeacher''
id=′′getTeacher′′并不是调用
T
e
a
c
h
e
r
M
a
p
p
e
r
TeacherMapper
TeacherMapper接口中的
g
e
t
T
e
a
c
h
e
r
getTeacher
getTeacher方法,而是取得id名,方便标签中select属性调用
标签:数据库对应的实体类中的属性是一个类时,使用标签,
property属性和colum属性的用法与相同,
javaType属性指定实体类中属性的类型
select属性为调用另一个查询的结果
这种方式相当于SQL中的子查询,将需要的结果,放在另一个select中查询
按照结果嵌套处理
对应的 m a p p e r . x m l mapper.xml mapper.xml文件为
<select id="getStudent2" resultmap="StudentTeacher2">
select s.id sid, s.name sname, t.name tname
from myBatis.student s, myBatis.teacher t
where s.tid=t.id
2、一对多查询
环境搭建
与多对一类似,唯一的区别就是实体类不同
// 学生类
@Data@AllArgsConstructor@NoArgsConstructor
public class Student {
private int id;
private String name;
private int tid;
}
// 老师类
@Data@NoArgsConstructor@AllArgsConstructor
public class Teacher {
private int id;
private String name;
// 一个老师有多个学生
private List students;
}
以/通过
t
i
d
tid
tid获取老师和学生对应的所有的学生为例
按查询嵌套处理
对应的配置为
select *
from myBatis.teacher
where id = #{tid}
标签:数据库对应的实体类中的属性是一个集合时,使用标签,
property属性和colum属性的用法与相同,
javaType属性指定实体类中属性的类型,
ofType指定映射到集合中的pojo类型,也就是泛型,
select属性为调用另一个查询的结果
column为传入select所调用的查询的参数
按照结果嵌套查询
select t.id tid, t.name tname, s.id sid, s.name sname
from myBatis.teacher t, myBatis.student s
where t.id = s.tid and t.id = #{tid}
作者:答学网,转载请注明原文链接:http://www.dxzl8.com/