[mybatis]resultMap详解

ops/2025/3/13 16:34:34/

resultMap

    Mybatis中提供了resultMap功能,可以将数据库查询结果映射到Java对象,用于解决 字段名与属性名不一致复杂关系(如一对多)的映射问题。 

比如一个User类,在它的属性里还有另一个子对象(或者多个),可以是个List或者其他实体类,这个时候就需要用到

    格式:

<resultMap type="User" id="userOrderMap">

type:要映射的实体类;id:给该resultMap定义一个唯一标识符。

id、result标签:用于映射指定的属性(不包含除String外的实体类对象),这两者的在映射上没有太多不同。id可以用于标识对象的主键字段,提升性能(MyBatis用主键判断对象是否重复)。

<resultMap id="" type=""><id column="" property=""></id><result column="" property=""></id>
</resultMap>

column:对应表的列名

property:java对象的属性名

collection标签:用于映射一对多的子对象,比如将多条数据映射到某个集合中(集合的元素类型是某种实体类)。如果有点晕,就记得:给集合、map等类型的属性赋值,使用collection

<!-- 给list的属性赋值-->
<collection property="" ofType=""><id column="" property=""></id><result column="" property=""></id>
</collection><!-- 给map属性赋值-->
<collection property=""           javaType="java.util.HashMap"  <!-- 固定为某个Map,此处写的是HashMap -->ofType=""         keyColumn=""           <!-- 指定作为Map键的列 -->keyProperty=""              <!-- 键值对中,值对象中作为键的属性 -->
><id column="" property=""/><result column="" property=""/>
</collection>

property:父对象中对应的子对象

ofType:子对象对应的数据类型,比如该子对象的数据类型是User类,那么此处就填写User。如果是给Map元素赋值,那么该属性的功能是指定 value 的数据类型

keyColumn:在映射Map类型数据时,用于指定key 的数据类型

给Map映射的内容,光描述比较抽象难懂,下面是个示例:

public class Order {private Long id;private String orderNumber;private Map<Long, OrderItem> itemMap; // 键为商品ID,值为OrderItem对象// Getters & Setters
}public class OrderItem {private Long id;        // 与keyProperty="id"对应private String name;private Integer quantity;// Getters & Setters
}//映射后的数据结构order.getItemMap() = {1001: OrderItem(id=1001, name="商品A", quantity=2),1002: OrderItem(id=1002, name="商品B", quantity=5)
}

 <association>标签

    与使用collection标签映射List用法一致,只是将collection改成association即可。区别在于,collection是给集合中多个元素的属性进行赋值,association是给父对象的某一个子对象元素中的属性进行赋值。

    不过javaType在此处应写对应的类类型。

示例:

<association property="user" javaType="User"><id column="id" property="id"/>             <result column="username" property="name"/>   <result column="sex" property="sex"/>        <!-- 其他字段映射... -->
</association>

                                                           


http://www.ppmy.cn/ops/165449.html

相关文章

无服务架构:设计一个基于 AWS Lambda 和 S3 的音乐网站

作为开发者&#xff0c;我一直对如何构建高效、可扩展的网络应用感兴趣&#xff0c;尤其是如何在云平台上创建一个简单而强大的音乐网站。为了实现这个目标&#xff0c;我决定使用 AWS Lambda、S3 和一些其他 AWS 服务来设计和开发这个项目。以下是我在构建这个音乐网站时所采用…

全局引用scss文件定义的变量

在vite.config.ts文件中写如下代码 css: {preprocessorOptions: {scss: {additionalData: use "/assets/styles/index.scss";,//这一句javascriptEnabled: true}} }在scss文件中定义变量 $color:#000;在其他文件引用变量 <style lang"scss" scoped&g…

PHP版多语言多商家海外商城源码开源无加密

PHP版多语言多商家海外商城源码开源无加密 支持各种功能逻辑二次开发 附带详细搭建教程 后台支持POS批量下单、定时爆单、商家直通车 前后台多国语言、多货币切换、汇率自动换算 支持PayPal等多种在线国际支付方式 离线支付方式&#xff1a;银行卡、USDT等手动支付方式&a…

数据结构:排序详解(使用语言:C语言)

1.排序的概念及其运用 1.1排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录…

数据分析人员需要掌握sql到什么程度?

学习SQL三个层次 熟悉基本的增删改查语句及函数&#xff0c;包括select、where、group by、having、order by、delete、insert、join、update等&#xff0c;可以做日常的取数或简单的分析&#xff08;该水平已经超过90%非IT同事&#xff09;;掌握并熟练使用高阶语法&#xff0…

蓝桥杯备考:新二叉树

这道题和正常的前序遍历没啥区别&#xff0c;就是改成char而已吧 #include <iostream> using namespace std; const int N 300; char l[N],r[N]; void dfs(char root) {if(root *) return;cout << root;dfs(l[root]);dfs(r[root]);} int main() {int n;cin >&…

Java链接redis

一、准备工作就像谈恋爱 首先咱们得来点仪式感是不是&#xff1f;打开你的Maven&#xff08;Gradle玩家别打我&#xff09;&#xff0c;把这两个宝贝依赖给我焊死在pom.xml里&#xff1a; <!-- 经典永不过时的Jedis --> <dependency> <groupId>redis.cli…

pdf修改内容:分享5款好用的工具

pdf修改内容用什么软件&#xff1f;PDF内容修改工具的便捷性很大地提升了我们的工作效率。通过这些工具&#xff0c;我们可以轻松地对PDF文档进行文字编辑、图片替换、页面调整等操作&#xff0c;无需繁琐的转换步骤。这些修改工具不仅操作简便&#xff0c;而且功能强大&#x…