一.多对一的映射关系

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

第二步,在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. @suppressWarnings("unchecked") java 中是什么意思 (一般放dao查询方法上)

    J2SE 提供的最后一个批注是 @SuppressWarnings.该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默. 一点背景:J2SE 5.0 为 Java 语言增加 ...

  2. MySQL系列操作

    Linux环境下安装使用MySQL Portal 数据备份&恢复 Portal

  3. 13. 罗马数字转整数----LeetCode

    13. 罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 ...

  4. CAS原理解析

    CAS底层原理 概念 CAS的全称是Compare-And-Swap,它是CPU并发原语 它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的 CAS并发原语体现在Jav ...

  5. JS-Array-新增方法

    1. filter( ) var arr = [5,4,3,2,1]; newarr = arr.filter((item)=>{ return item<3 }) ;  // => ...

  6. HTML+CSS教程(二)frameset框架和iframe内嵌

    一.框架 (frameset)1.用<frameset></frameset>代替了<body></body>2.rows设置行的占页面的百分比:col ...

  7. react: typescript integrate withRouter

    define interface: export interface INav { nav: string } export interface IModuleItem { state?: strin ...

  8. Java中集合概念

    集合的由来: 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行储存,而想要储存多个对象,就不能是一个基本的变量,而应该是一个 ...

  9. Java IO 流 -- 设计模式:装饰设计模式

    在java IO 流中我们经常看到这样的写法: ObjectOutputStream oos = new ObjectOutputStream( new BufferedOutputStream(ne ...

  10. Java IO基础--File常用操作(递归)

    File中经常会使用递归方法打印属性结构.统计文件夹下文件个数.子文件夹个数以及文件大小,可以作为递归的应用练习. 递归的写法,百度一搜一大堆,这里我使用对javabean方式封装了一下: packa ...