一.多对一的映射关系

举例:根据员工编号查询员工所在部门的部门信息
第一步,需要在多的一方也就是员工实体类中持有一的一方部门实体类的引用

第二步,在dao接口中声明方法

第三步,在mapper中实现该方法
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aaa.mybatis.dao.EmpDao">
<!---创建resultMap映射关联关系-->
<!--type对应resultMap中的实体类的类型 ,需要写实体类的完全限定名-->
<resultMap id="empMap" type="com.aaa.mybatis.entity.Emp">
<!--id标签用来映射实体类的主键
column对应sql语句返回值的别名 不区分大小写
property对应实体类中属性名 区分大小写
-->
<id column="empno" property="empno"></id>
<!--result映射普通的属性-->
<result column="ename" property="ename"></result>
<result column="sal" property="sal"></result>
<!--配置多对一的关联映射
property对应实体类中持有的一的一方的属性名
javaType 对应持有的一的一方的属性的类型,即该属性对应类的完全限定名
-->
<association property="dept" javaType="com.aaa.mybatis.entity.Dept">
<id column="deptno" property="deptno"></id>
<result column="dname" property="dname"></result>
<result column="loc" property="loc"></result>
</association>
</resultMap>
<select id="findByEmpno" resultMap="empMap">
select e.empno as empno, e.ename as ename,e.sal as sal,d.deptno as deptno ,d.dname as dname ,d.loc as loc
from emp e inner join dept d on e.deptno=d.deptno where e.empno=#{empno}
</select>
</mapper>

第四步,测试

public static void main(String[] args) {
SqlSession session = SqlSessionFactoryUtil.getSession();
EmpDao empdao = session.getMapper(EmpDao.class);
Emp emp = empdao.findByEmpno(7369L);
System.out.println("员工编号:"+emp.getEmpno());
System.out.println("员工姓名:"+emp.getEname());
System.out.println("基本工资"+emp.getSal());
//获取员工的部门信息
Dept dept = emp.getDept();
System.out.println("部门对象:"+dept);
System.out.println("部门编号:"+dept.getDeptno());
System.out.println("部门名称:"+dept.getDname());
System.out.println("部门地址:"+dept.getLoc());
System.out.println();
session.close();
}

使用在resultMap或者association中可以使用autoMapping属性,这个值设置成true,则列的别名和实体类属性名
一直的标签就可以省略不写了。

在DeptDaoMapper中一般都会有deptMap的声明:

在EmpDaoMapper中配置empMap的时候,association的resultMap属性可以指向以上声明的deptMap,这样可以
达到复用map的目的。 

二.一对多的映射关系

举例:根据部门编号查询某个部门下有哪些员工,打印这些员工的信息。
第一步,在一的一方持有多的一方的引用

第二步,在dao接口中声明方法

第三步,在mapper中实现该方法 
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aaa.mybatis.dao.DeptDao">
<!--创建resultMap-->
<resultMap id="deptMap" type="com.aaa.mybatis.entity.Dept">
<id column="deptno" property="deptno"></id>
<result column="dname" property="dname"></result>
<result column="loc" property="loc"></result>
<!--配置一对多的映射关系
property 一的一方持有的多的一方的属性的名称
ofType 一的一方持有的多的一方的属性的集合类型中的实体类的完全限定名
-->
<collection property="emps" ofType="com.aaa.mybatis.entity.Emp">
<id column="empno" property="empno"></id>
<result column="ename" property="ename"></result>
<result column="sal" property="sal"></result>
</collection>
</resultMap>
<select id="findByDeptno" resultMap="deptMap">
select d.deptno,d.dname,d.loc,e.empno,e.ename,e.sal
from dept d inner join emp e on d.deptno =e.deptno where d.deptno=#{deptno}
</select>
</mapper>
第四步,测试
/**
* 配置一对多的关联
*/
public class Test01 {
public static void main(String[] args) {
SqlSession session = SqlSessionFactoryUtil.getSession();
DeptDao deptDao = session.getMapper(DeptDao.class);
Dept dept = deptDao.findByDeptno(10L);
System.out.println("部门编号:"+dept.getDeptno());
System.out.println("部门名称:"+dept.getDname());
System.out.println("部门位置:"+dept.getLoc());
System.out.println("=====");
List<Emp> emps = dept.getEmps();
for (Emp e :
emps) {
System.out.println("员工编号:"+e.getEmpno());
System.out.println("员工姓名:"+e.getEname());
System.out.println("员工基本工资:"+e.getSal());
System.out.println("---------");
}
session.close();
}
}

mybatis的关系映射的更多相关文章

  1. MyBatis加强(1)~myBatis对象关系映射(多对一关系、一对多关系)、延迟/懒加载

    一.myBatis对象关系映射(多对一关系.一对多关系) 1.多对一关系: ---例子:多个员工同属于一个部门. (1)myBatis发送 额外SQL: ■ 案例:员工表通过 dept_id 关联 部 ...

  2. MyBatis框架——关系映射(一对多、多对多、多对一查询)

    关系映射 一.映射(多)对一.(一)对一的关联关系 1).使用列的别名 ①.若不关联数据表,则可以得到关联对象的id属性 ②.若还希望得到关联对象的其它属性.则必须关联其它的数据表 1.创建表: 员工 ...

  3. Mybatis对象关系映射 one2one,one2many,many2many

    MyBatis中的高级映射一般要借助select元素中的resultMap属性进行实现,通过此属性配置实现一对一,一对多等关系映射的实现 一对一映射:association 一对多映射:collect ...

  4. 框架应用:Mybatis (三) - 关系映射

    你有一张你自己的学生证?(一对一) 你这一年级有多少个学生?(一对多) 班上学生各选了什么课?(多对多) 两张表以上的操作都需要联立多张表,而用SQL语句可以直接联立两张表,用工程语言则需要手动完成这 ...

  5. 第9章 MyBatis的关系映射

    在实际开发中,对数据库的操作通常涉及多张表,涉及了对象和对象之间的关联关系.针对多表之间的操作,MyBatis提供了关联映射,通过关联映射就可以很好的处理对象与对象之间的关联关系 9.1 关联关系概述 ...

  6. mybatis 对象关系映射例子

    入门 http://legend2011.blog.51cto.com/3018495/908956 增删改 http://legend2011.blog.51cto.com/3018495/9130 ...

  7. [刘阳Java]_MyBatis_实体关系映射_第8讲

    MyBatis既然是一个ORM框架,则它也有像Hibernate那样的一对多,多对多,多对一的实体关系映射功能.下面我们就来介绍一下如何使用MyBatis的实体关系映射 1.MyBatis实体关系映射 ...

  8. Mybatis框架中实现双向一对多关系映射

    学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...

  9. MyBatis 关系映射XML配置

    关系映射 在我看来这些实体类就没啥太大关联关系,不就是一个sql语句解决的问题,直接多表查询就完事,程序将它设置关联就好 xml里面配置也是配置了sql语句,下面给出几个关系的小毛驴(xml) 一对多 ...

随机推荐

  1. 用threejs实现三维全景图

    网络上看到了3D全景图,发现threejs里面有一个库竟然可以实现,一下我贴出代码: <!DOCTYPE html> <html> <head> <meta ...

  2. 如何让一张图片变成二值图像?python+opencv图像处理

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:张熹熹 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...

  3. 068.Python框架Django之DRF视图集使用

    一 视图集与路由的使用 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() ...

  4. 今天我们来讨论一下CSS3属性中的transition属性;

    transition属性是CSS3属性:顾名思义英文为过渡的意思:主要有四个值与其一一对应:分别是property(CSS属性名称),duration过渡的时长,timimg-function转速曲线 ...

  5. 2019CISCN华南线下两道web复现

    原帖地址 : https://xz.aliyun.com/t/5558 2019CISCN华南线下的两个简单 web 部分题目下载地址,有的不完整 : 点我点我 web 1 考点 : 无参函数的 RC ...

  6. 移动(appium)自动化测试-爬虫的另一种手段

    appium自动化测试环境搭建: 1.Python环境(推荐2.7)和jdk. 2.Adb工具的下载:自己单独下载adb.夜神模拟器自带和Android sdk 3.Apk安装介质:真机.Androi ...

  7. Scala教程之:Either

    在之前的文章中我们提到了Option,scala中Option表示存在0或者1个元素,如果在处理异常的时候Option就会有很大的限制,因为Option如果返回None,那么我并不知道具体的异常到底是 ...

  8. java基于OpenCV的人脸识别

    基于Java简单的人脸和人眼识别程序 使用这个程序之前必须先安装配置OpenCV详细教程见:https://www.cnblogs.com/prodigal-son/p/12768948.html 注 ...

  9. oracle查询当前系统时间前10天的数据

    select * from eo_c_order t where t.create_time>systimestamp-interval'1'day; 转载于:https://www.cnblo ...

  10. 监控之--Nagios如何监控本地主机及本地服务

    上一节内容介绍了Nagios监控服务在linux环境下的安装过程,本节内容将详细介绍如何使用已经安装的Nagios服务的一些配置文件的使用以及如何监控本地相关服务,如要完成对一台主机的监控Nagios ...