概念
假如遇到一种需求,查询一个人,顺便要求把他的下属职员的信息也搜出来,那么就需要用到关联查询
那么这样查询的话返回值肯定不能是resultType了
得靠resultMap来映射一下
resultMap里的属性标签
一对一感觉直接表关联就可以先学习一对多
首先实体类
/**
* @author JAVA
* 学习关联查询实体类
*/
public class Emp {
private String name;
private String job;
private String Boss;
private List zhazha;
public String getBoss() {
return Boss;
}
public void setBoss(String boss) {
Boss = boss;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public List getZhazha() {
return zhazha;
}
public void setZhazha(List zhazha) {
this.zhazha = zhazha;
}
}
下属用实体类建立集合
Controller
@GetMapping("/learnLinked")
@ApiOperation(value = "学习关联查询")
public List learnLinked(){
return service.learnLinked();
}
Service
public ListlearnLinked() {
// TODO Auto-generated method stub
List emp = null;
emp = empMapper.learnLinked();
return emp;
}
Dao
public List learnLinked();
Mapper 重点来了
第一条语句很简单 去查询没有上级的人员名单
之后建立了一个resultmap 来映射要关联查询字段
oftype 指定映射java类型
column 指定要拿哪行去关联查询 以此例子说明 就是拿第一条语句查出的name 去查所对应的下属
select 指定要执行的语句
第二条sql
去查询 上级名是上级sql映射过来的 name
注意点 第一次查询必须为 没有上级的 不然会报错
### The error may exist in file [D:\SpringBootWorkSpace\SpringBootMyBatisAndSwagger\target\classes\mapper\EmpMapper.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: select * from 关联查询学习 where boss
### Cause: java.sql.SQLSyntaxErrorException: ORA-00920: 无效的关系运算符
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00920: 无效的关系运算符
] with root cause
oracle.jdbc.OracleDatabaseException: ORA-00920: 无效的关系运算符
--------------------------------------------------------------------------------------------------------------
关联查询 还有可能要传递多个参数 下面是解决方法