概述
目录
- 一、介绍,
- 二、关联映射步骤
- 1.接口文件编写接口
- 2.修改关联实体类
- 3.编写映射文件
- 3.1 配置映射关联
- 3.2 编写SQL语句
- 4.测试
一、介绍,
关联映射查询:
查询的结果涉及数据库中多个表格的列,则这种查询称为关联映射查询
存在的问题:
如何处理查询到的结果,而不创建新的类?我TM也不知道为啥非有这种设定
解决方案:
在从表的关联实体类中创建主表关联实体类的属性类,也就衍生出另一个问题,粗暴点说“到底在哪个实体类里创建别的实体类的属性类?”
代码:
注意创建了属性类,记得增加set和get语句,否则没有意义
二、关联映射步骤
以查询结果涉及Emp、Dept、Salgrade三个关联实体类的search( )函数接口为例
1.接口文件编写接口
在mapper文件中编写
List<Emp> search(Dto dto);
2.修改关联实体类
由于Emp是唯一有外键的关联实体类,所以在Emp实体类里创建Dept和Salgrade的属性类,记得创建对应属性类的Set和Get访问方法。
package com.upc.homework2.po;
public class Emp {
private Integer empno;
private String ename;
private String job;
private Integer mgr;
private String hiredate;
private Double sal;
private Double comm;
private Integer deptno;
// 创建属性类
private Dept dept;
private Salgrade grade;
// 创建Dept的访问
public Dept getDept() { return dept;}
public void setDept(Dept dept) {this.dept = dept;}
// 创建Salgrade的访问
public Salgrade getGrade() {return grade;}
public void setGrade(Salgrade grade) {this.grade = grade;}
// Emp实体类属性本身的访问
public Integer getEmpno() {return empno;}
public void setEmpno(Integer empno) {this.empno = empno;}
public String getEname() {return ename;}
public void setEname(String ename) {this.ename = ename;}
public String getJob() {return job;}
public void setJob(String job) {this.job = job;}
public Integer getMgr() {return mgr;}
public void setMgr(Integer mgr) {this.mgr = mgr;}
public String getHiredate() { return hiredate;}
public void setHiredate(String hiredate) {this.hiredate = hiredate;}
public Double getSal() {return sal;}
public void setSal(Double sal) {this.sal = sal;}
public Double getComm() {return comm;}
public void setComm(Double comm) {this.comm = comm;}
public Integer getDeptno() {return deptno;}
public void setDeptno(Integer deptno) {this.deptno = deptno;}
}
3.编写映射文件
3.1 配置映射关联
个人理解:
所谓配置映射关联,就是创建了一种新的数据类型
配置的原因:
由于自动创建的Emp关联实体类计算机默认只与emp表关联,即使我们在里面添加了表属性,计算机是不会识别的,所以我们直接让resultType=“com.upc.homework2.po.Emp”电脑会报错,需要重新弄配置一个新的类型
语法:
- id 标签 将数据库表格的主键 与关联实体类的属性进行关联
- resul 标签 将数据库表格的列 与关联实体类的属性进行关联
- association 标签 将 关联实体类 与关联实体类的属性类进行关联
说是配置、关联,也可以说是一种声名,声名数据类型都是来自哪
<!-- 创建新的resultMap,名为empMap,数据类型是com.upc.homework2.po.Emp -->
<resultMap id="empMap" type="com.upc.homework2.po.Emp">
<!-- 关联-Emp实体类与emp表格的主键 -->
<id column="empno" property="empno"/>
<!-- 关联-Emp的属性和emp表的列名 -->
<result column="ename" property="ename" />
<result property="job" column="job" />
<!-- 关联-Emp中的属性类dept与关联实体类Dept -->
<association property="dept" javaType="com.upc.homework2.po.Dept">
<!-- 关联-属性类dept与数据库表dept的主键、列名 -->
<id column="deptno" property="deptno"/>
<result property="dname" column="dname"/>
<result property="loc" column="loc"/>
</association>
<!-- 关联-Emp实体类里的属性类grade与关联实体类Salgrade -->
<association property="grade" javaType="com.upc.homework2.po.Salgrade">
<!-- 关联-属性类grade与数据库表salgrade的主键、列名 -->
<id column="grade" property="grade"/>
<result column="losal" property="losal"/>
<result column="hisal" property="hisal"/>
</association>
</resultMap>
注意:
- 配置关联关系,查询结果涉及到的属性都要配置,多写了可以,少了不行
- 关联语法中property与colunmn的前后位置有什么意义、区别 :没有任何意义,谁在前都可以
3.2 编写SQL语句
唯一的区别是保存结果的数据类型变了
由 resultType=“com.upc.homework2.po.Emp” 变为
resultMap=“empMap”
<select id="search" resultMap="empMap" parameterType="com.upc.homework2.dto.Dto">
select
e.ename,d.dname,s.grade
from emp e,dept d,salgrade s
where e.deptno=d.deptno
and e.sal between s.losal and s.hisal
<if test="lowsal != null and lowsal != ''">
and losal >= #{lowsal}
</if>
<if test="higsal != null and higsal != ''">
and hisal <= #{higsal}
</if>
</select>
4.测试
关键在于如何调用关联实体类的属性类
@Test
// emp.getDept().getDname():emp.getDept()获取emp里的Dept表,.getDname()再获取Dept表里的danme属性
// emp.getGrade().getGrade() 同理,获取Grade表里的grade属性
//与Salgrade salgrade = emp.getGrade(); salgrade.getGrade()同理
void search() {
Dto dto = new Dto();
List<Emp> emps = mMapper.search(dto);
// 一个for循环在总台输出
emps.forEach(emp->{
Salgrade salgrade = emp.getGrade();
System.out.println(emp.getEname()+"t"+emp.getDept().getDname()+"t"+salgrade.getGrade());
});
}
最后
以上就是沉默玉米为你收集整理的基于MyBatis的关联映射查询一、介绍,二、关联映射步骤的全部内容,希望文章能够帮你解决基于MyBatis的关联映射查询一、介绍,二、关联映射步骤所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复