一对多映射(两种方式)
三张表关联查询。当然resultType也能实现,需要将所查询的信息定义到一个pojo(详情见一对一映射中的resultType),这里讲的是resultMap。
需求:查询人员、部门信息并关联查询其父级部门信息。
随意定义数据库的三张表:

人员表:

部门表:

父级部门表:

方式一:association (一对一映射)+collection(一对多映射)
a.建立人员表的pojo:

package com.example.data;import java.util.List;public class User {private String id;private String deptId;private String name;private String sex;private String age;private String remark;/*** User表中有一个dept_id字段,要在User类中定义一个dept属性,* 用于维护dept和user之间的一对一关系*/private Dept dept;//使用一个List<Pdept>集合属性表示父级部门中的子部门private List<Pdept> pdepts;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getDeptId() {return deptId;}public void setDeptId(String deptId) {this.deptId = deptId;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getRemark() {return remark;}public void setRemark(String remark) {this.remark = remark;}public Dept getDept() {return dept;}public void setDept(Dept dept) {this.dept = dept;}public List<Pdept> getPdepts() {return pdepts;}public void setPdepts(List<Pdept> pdepts) {this.pdepts = pdepts;}@Overridepublic String toString() {return "User{" +"id='" + id + '\'' +", deptId='" + deptId + '\'' +", name='" + name + '\'' +", sex='" + sex + '\'' +", age='" + age + '\'' +", remark='" + remark + '\'' +", dept=" + dept +", pdepts=" + pdepts +'}';}
}

b.建立部门表的pojo:

package com.example.data;public class Dept {private String id;private String deptName;private String parentId;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getDeptName() {return deptName;}public void setDeptName(String deptName) {this.deptName = deptName;}public String getParentId() {return parentId;}public void setParentId(String parentId) {this.parentId = parentId;}@Overridepublic String toString() {return "Dept{" +"id='" + id + '\'' +", deptName='" + deptName + '\'' +", parentId='" + parentId + '\'' +'}';}
}

b.建立父级部门表的pojo:

package com.example.data;public class Pdept {private String id;private String pdeptName;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getPdeptName() {return pdeptName;}public void setPdeptName(String pdeptName) {this.pdeptName = pdeptName;}@Overridepublic String toString() {return "Pdept{" +"id='" + id + '\'' +", pdeptName='" + pdeptName + '\'' +'}';}
}

b.编写Mapper.xml:

<select id="selectOneToMany"  resultMap="selectRstMapTwo"><![CDATA[select * from bank_user,bank_dept,bank_pdept where bank_user.dept_id=bank_dept.id and bank_dept.parent_id=bank_pdept.id]]></select><!--定义resultmapcolumn:数据库中对应的列名(名字必须完全一样)property:实体类pojo中的属性名(名字必须完全一样)--><resultMap type="com.example.data.User" id="selectRstMapTwo"><id column="id" property="id"/><result column="name" property="name"/><result column="age" property="age"/><result column="sex" property="sex"/><!--association:一对一关联映射--><association property="dept" javaType="com.example.data.Dept"><id column="id" property="id"/><result column="dept_name" property="deptName"/></association><!-- collection:一对多关联映射 property表示集合类型属性名称,也就是User实体类中定义的部门List名字ofType表示集合中的对象的类型--><collection property="pdepts" ofType="com.example.data.Pdept"><id column="id" property="id"/><result column="pdept_name" property="pdeptName"/></collection></resultMap>

c.编写Mapper.java:

    //一对多查询:查询人员、部门信息并关联查询其父级部门信息public List<User> selectOneToMany()throws Exception;

输出结果日志:

方式二:extends
与方式一不同点在于Mapper.xml:
上一篇一对一映射博客地址,下面实例会引用一个resultMap。

<select id="selectOneToMany"  resultMap="selectRstMapTwo"><![CDATA[select * from bank_user,bank_dept,bank_pdept where bank_user.dept_id=bank_dept.id and bank_dept.parent_id=bank_pdept.id]]></select><!--定义resultmapcolumn:数据库中对应的列名(名字必须完全一样)property:实体类pojo中的属性名(名字必须完全一样)extends:继承一个resultMap,把其中的所有配置都继承(这里继承的是上一篇一对一映射的resultMap)使用extends,只编写collection元素即可。--><resultMap type="com.example.data.User" id="selectRstMapTwo" extends="selectRstMap"><!-- collection:一对多关联映射 property表示集合类型属性名称,也就是User实体类中定义的部门List名字ofType表示集合中的对象的类型--><collection property="pdepts" ofType="com.example.data.Pdept"><id column="id" property="id"/><result column="pdept_name" property="pdeptName"/></collection></resultMap>

高级映射:【一对一映射】 【多对多映射】

Mybatis之高级映射【一对多映射】相关推荐

  1. MyBatis的高级映射之多对一

    第五节 MyBatis的高级映射之多对一 2016年3月4日 星期五 09:25 使用传统方式的形式 使用MyBatis的方式 这样会产生两条语句 使用ResultMap的方式,对结果进行映射和转换, ...

  2. Mybatis(四) 高级映射,一对一,一对多,多对多映射

    天气甚好,怎能不学习? 一.单向和双向 包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在hibernate中我们就详细解析过这单向和双向是啥意思,在这里,在重复一遍,就拿一对多这种 ...

  3. Mybatis学习记录(六)----Mybatis的高级映射

    作者:余家小子 1.一对多查询 1.1 需求 查询订单及订单明细的信息. 1.2 sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. SELECT ...

  4. MyBatis学习--高级映射

    简介 前面说过了简单的数据库查询和管理查询,在开发需求中有一些一对一.一对多和多对多的需求开发,如在开发购物车的时候,订单和用户是一对一,用户和订单是一对多,用户和商品是多对多.这些在Hibernat ...

  5. mybatis (高级映射 缓存 延迟加载)

    1     一对一查询映射的pojo 创建pojo包括 订单信息和用户信息,resultType才可以完成映射. 一个订单对应一个用户   因此在订单实体类中 我们应该加入一个用户属性  实体类如下: ...

  6. 【Mybatis高级映射】一对一映射、一对多映射、多对多映射

    前言 当我们学习heribnate的时候,也就是SSH框架的网上商城的时候,我们就学习过它对应的高级映射,一对一映射,一对多映射,多对多映射.对于SSM的Mybatis来说,肯定也是差不多的.既然开了 ...

  7. MyBatis之使用resultMap实现高级映射

    MyBatis之使用resultMap实现高级映射 2017/09/30 对于数据库中对表的增删改查操作,我们知道增删改都涉及的是单表,而只有查询操作既可以设计到单表操作又可以涉及到多表操作,所以对于 ...

  8. 【MyBatis框架】高级映射-延迟加载

    延迟加载 1.什么是延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能 ...

  9. mybatis入门(六)----高级映射(一对一,一对多,多对多)

    阅读目录 一:订单商品数据模型 二.一对一查询 三.一对多查询 四.多对多查询 回到顶部 一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: View Code 测试数据代码: View C ...

最新文章

  1. c++框架有哪些_Java Mybatis框架入门教程_v20200726
  2. debian手动安装java两种方法
  3. postfix邮件过滤
  4. div嵌套div 背景图片 不显示的问题
  5. dSploitzANTI渗透教程之HTTP服务重定向地址
  6. apache开启 gzip 压缩
  7. springboot打Jar包和War包
  8. Centos6.6安装之后调优
  9. react 版权问题_react使用fetch封装请求的方法-简单易懂
  10. Html5开发之链接标签nav的用法
  11. 我们为何要使用多线程,它有什么优点?
  12. PHP 获取服务器详细信息
  13. CSS 渐进增强与优雅降级
  14. Spark基础学习笔记05:搭建Spark Standalone模式的集群
  15. 今日头条把微信按在地上摩擦
  16. 除了工作怎么交朋友_老梁:交朋友要交比自己强的,结交和自己相似的人,不如没有朋友...
  17. [转]android sqlite db-journal文件产生原因及说明
  18. 乒乓球比赛赛程_2020乒乓球比赛赛程表
  19. maven项目中 org.hibernate.MappingNotFoundException: resource:**.hbm.xml not found问题的解决方案
  20. 自学平面设计,不能不知道的基础知识点是什么?

热门文章

  1. 在计算机的游戏怎样打开,电脑上那个吃鸡游戏怎么打开 | 手游网游页游攻略大全...
  2. iOS 15 内置原生壁纸下载
  3. linux 分析nginx日志,Linux Awk使用案例总结-nginx日志统计
  4. MTK平台camera小结(一)
  5. UE4 Pak跨引擎版本错误记录
  6. 徐小湛概率论与数理统计课件_概率论与数理统计-徐小湛-视频教程70讲
  7. 在一个内部群里,我围观了微信最流行的诱导吸粉活动
  8. 乡村振兴涉农区域全景综合安防监控解决方案
  9. Java finally 的用法,看这一篇就够了
  10. [Power]Mockito使用和扩展