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索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

MySQL中的交叉连接、自然连接和内连接查询详解

《MySQL中的交叉连接、自然连接和内连接查询详解》:本文主要介绍MySQL中的交叉连接、自然连接和内连接查询,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、引入二、交php叉连接(cross join)三、自然连接(naturalandroid join)四

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

resultMap如何处理复杂映射问题

《resultMap如何处理复杂映射问题》:本文主要介绍resultMap如何处理复杂映射问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录resultMap复杂映射问题Ⅰ 多对一查询:学生——老师Ⅱ 一对多查询:老师——学生总结resultMap复杂映射问题

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进