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

相关文章

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

XML重复查询一条Sql语句的解决方法

《XML重复查询一条Sql语句的解决方法》文章分析了XML重复查询与日志失效问题,指出因DTO缺少@Data注解导致日志无法格式化、空指针风险及参数穿透,进而引发性能灾难,解决方案为在Controll... 目录一、核心问题:从SQL重复执行到日志失效二、根因剖析:DTO断裂引发的级联故障三、解决方案:修复

mysql查询使用_rowid虚拟列的示例

《mysql查询使用_rowid虚拟列的示例》MySQL中,_rowid是InnoDB虚拟列,用于无主键表的行ID查询,若存在主键或唯一列,则指向其,否则使用隐藏ID(不稳定),推荐使用ROW_NUM... 目录1. 基本查询(适用于没有主键的表)2. 检查表是否支持 _rowid3. 注意事项4. 最佳实

Java继承映射的三种使用方法示例

《Java继承映射的三种使用方法示例》继承在Java中扮演着重要的角色,它允许我们创建一个类(子类),该类继承另一个类(父类)的所有属性和方法,:本文主要介绍Java继承映射的三种使用方法示例,需... 目录前言一、单表继承(Single Table Inheritance)1-1、原理1-2、使用方法1-

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MyBatis ResultMap 的基本用法示例详解

《MyBatisResultMap的基本用法示例详解》在MyBatis中,resultMap用于定义数据库查询结果到Java对象属性的映射关系,本文给大家介绍MyBatisResultMap的基本... 目录MyBATis 中的 resultMap1. resultMap 的基本语法2. 简单的 resul

Mybatis的分页实现方式

《Mybatis的分页实现方式》MyBatis的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异,对Mybatis的分页实现方式感兴趣的朋友一起看看吧... 目录​1. 原生 SQL 分页(物理分页)​​2. RowBounds 分页(逻辑分页)​​3. Page

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis