mybatis多表查询的结果映射(resultMap)

2024-04-26 23:18

本文主要是介绍mybatis多表查询的结果映射(resultMap),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Mybait多张表查询时的结果映射resultMap

1、mybatis简介

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。它可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

2、resultMap(多表查询 或 数据库列名与实体属性名不一致时使用)

resultMap是Mybatis最强大的元素,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中。

主要用法:

(1)一对一关系查询(这时候简单的用resultType就行)

<select id="findEnterPriseInfor" resultType="EnterpriseInfor">//id接口方法明 resultType返回结果的类型select * from enterprise_infor where username=#{username}
</select>

(2)多对一关系查询

职位实体类(企业发布职位 每个企业可以发布多个职位,多个职位属于一个企业)

public class EnterprisePosition {private String username;private int id;private String positionType;private String positionName;private String jobCity;private String jobNature;private String jobExperience;private String eduRequirement;private int minSalary;private int maxSalary;private String mailbox;private String positionTale;private String positionRequirement;private String positionLure;private Timestamp publishedDate;private int clickNum;//点击次数//关联属性 多对一private EnterpriseInfor enterpriseInfor;//企业对象public EnterprisePosition() {super();// TODO 自动生成的构造函数存根}// get、set方法省略
}

企业实体类

public class EnterpriseInfor {private String username;private String entername;private String mailbox;private String address;private String website;private String sector;//工业领域private String scale;//规模大小private String establishtime;//建立时间private String nature;//经营性质private String lure;//公司福利private String develop;//发展阶段private String tale;public EnterpriseInfor() {super();// TODO 自动生成的构造函数存根}

查询要求,查询所有企业已发布的职位信息,以及对应企业的个别信息
(意思就是要结果里有职位信息,以及对应企业的个别信息)

思路:首先按要求,从职位表中查询所有职位信息,从企业表中查询企业的个别信息

<select id="接口方法名" resultMap="position1Map">//resultMap属性可以说是个id名,用来和下面的reslutMap标签匹配select p.*, e.entername, e.sector, e.scale, e.develop, e.lure//查询p表(职位信息表)的所有信息,查询e表(企业表)的个别信息from enterprise_position p, enterprise_infor e//职位表别名 p 企业表别名 e where p.username = e.usernameorder by p.clicknum DESC<!-- DESC降序 (最好大写) ASC 升序默认-->
</select>思路:写好sql语句后,返回的结果中包含两个实体,所以这时就要用到resultMap
首先用resultMap的type属性指定返回结果的类型 职位类型 EnterprisePosition
(这里是多对一查询,在职位实体的属性中,有个企业对象enterpriseInfor)指定好结果类型后,先处理职位信息实体
使用id、result标签将数据库列名和实体属性名一一对应 column对应数据库列名,property对应实体属性名
(id标签是专用来对应id列的,另外结果用到多少属性,便result多少属性  我这里都用到了,所以便都写上了)<resultMap type="EnterprisePosition" id="position1Map">//type是返回结果的实体类<id column="id" property="id"/><result column="username" property="username"/><result column="positionname" property="positionName"/><result column="positiontype" property="positionType"/><result column="jobcity" property="jobCity"/><result column="jobnature" property="jobNature"/><result column="jobexperience" property="jobExperience"/><result column="edurequirement" property="eduRequirement"/><result column="minsalary" property="minSalary"/><result column="maxsalary" property="maxSalary"/><result column="mailbox" property="mailbox"/><result column="positiontale" property="positionTale"/><result column="positionlure" property="positionLure"/><result column="positionrequirement" property="positionRequirement"/><result column="publisheddate" property="publishedDate"/><result column="clicknum" property="clickNum"/>将职位信息实体的数据库列名和实体属性名一一对应后,再处理职位信息实体中的企业对象enterpriseInfor
这里用association标签,它可以用来映射实体中的对象
<association property="对象属性名" javaType="模型类名">
指定好association后,再用result指定要使用(返回)的结果对象属性!!注意,当结果实体中包含的List等集合对象,就不能用association标签了,这时就要使用collection标签<association property="enterpriseInfor" javaType="EnterpriseInfor"><!-- 对象联系 用javatype  集合Collection 用oftype --><result column="username" property="username"/><result column="entername" property="entername"/><result column="sector" property="sector"/><result column="scale" property="scale"/><result column="lure" property="lure"/><result column="develop" property="develop"/></association></resultMap>

3、结论

当用到多张表进行查询的时候,用resultMap是最好的处理方式

参考:
https://fengkay.blog.csdn.net/article/details/103559483

这篇关于mybatis多表查询的结果映射(resultMap)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/938928

相关文章

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

mybatis-plus如何根据任意字段saveOrUpdateBatch

《mybatis-plus如何根据任意字段saveOrUpdateBatch》MyBatisPlussaveOrUpdateBatch默认按主键判断操作类型,若需按其他唯一字段(如agentId、pe... 目录使用场景方法源码方法改造首先在service层定义接口service层接口实现总结使用场景my

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I