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 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

Spring Boot 中整合 MyBatis-Plus详细步骤(最新推荐)

《SpringBoot中整合MyBatis-Plus详细步骤(最新推荐)》本文详细介绍了如何在SpringBoot项目中整合MyBatis-Plus,包括整合步骤、基本CRUD操作、分页查询、批... 目录一、整合步骤1. 创建 Spring Boot 项目2. 配置项目依赖3. 配置数据源4. 创建实体类

Mybatis拦截器如何实现数据权限过滤

《Mybatis拦截器如何实现数据权限过滤》本文介绍了MyBatis拦截器的使用,通过实现Interceptor接口对SQL进行处理,实现数据权限过滤功能,通过在本地线程变量中存储数据权限相关信息,并... 目录背景基础知识MyBATis 拦截器介绍代码实战总结背景现在的项目负责人去年年底离职,导致前期规

Redis KEYS查询大批量数据替代方案

《RedisKEYS查询大批量数据替代方案》在使用Redis时,KEYS命令虽然简单直接,但其全表扫描的特性在处理大规模数据时会导致性能问题,甚至可能阻塞Redis服务,本文将介绍SCAN命令、有序... 目录前言KEYS命令问题背景替代方案1.使用 SCAN 命令2. 使用有序集合(Sorted Set)

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来