【Mybatis】@Param注解 resultMap手动映射

文章目录

    • 一、映射文件参数
    • 二、查询映射
      • 2-1 一对一
      • 2-2 一对多
      • 2-3 总结

一、映射文件参数

@Param 注解官方文档解释

在这里插入图片描述

1、单个参数(对象)不使用注解

public int save(User user);
<!-- 添加用户 -->
<insert id="save" parameterType="User">INSERT INTO smbms_user (userCode, userName, gender, birthday, address)VALUES (#{userCode}, #{userName}, #{gender}, #{birthday}, #{address})
</insert>

User 类型的参数对象传递到了语句中,会查找 userCode、userName 和 gender 等属性,然后将它们的值传入预处理语句的参数中。

2、多个参数(原始类型或简单数据类型)使用注解

public List<Bill> findBillList(@Param("productName") String productName,@Param("productDesc") String productDesc);
<!-- 模糊查询功能 -->
<select id="findBillList" parameterType="String" resultType="Bill">select id,billCode,productName,productDesc from smbms_billwhere productName like concat("%",#{productName},"%")and productDesc like concat("%",#{productDesc},"%")
</select>

3、多个参数不使用注解(Map)

List<User> getUserByMap(Map<String, Object> paramMap);
<!-- 查询语句 -->
<select id="getUserByMap" parameterType="map"  resultType="User">SELECT id,userCode,userName,birthday FROM smbms_userWHERE birthday BETWEEN #{startDate} AND #{endDate}
</select>
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("startDate", startDate); 
paramMap.put("endDate", endDate); 

二、查询映射

resultTyperesultMap 两种方式指定查询结果的返回列。

  • resultType:自动映射。查询结果直接映射到一个简单的 Java 对象(POJO)
  • resultMap:手动映射。更复杂的映射逻辑,比如处理一对一、一对多的关系映射,或对结果集进行特殊处理

在 mybatis 主配置文件中关闭自动映射

<!-- 关闭自动映射 -->
<settings><setting name="autoMappingBehavior" value="NONE"/>
</settings>

autoMappingBehavior 控制自动映射的行为。

  • NONE:关闭自动映射
  • PARTIAL:只会自动映射没有定义嵌套结果集映射的结果集(默认值)(推荐)
  • FULL:会自动映射任意复杂的结果如嵌套(可读性弱,不推荐)

简单的 resultMap 定义示例:

<resultMap id="userResultMap" type="User"><id property="id" column="user_id" /><result property="username" column="user_name" /><result property="password" column="user_password" />
</resultMap>
  • id: 代表主键映射。
  • result: 代表普通属性映射。
  • type: 指定要映射的目标类(即 Java 类)。
  • property: 指定 Java 类中的属性。
  • column: 指定数据库表中的列名。

propertycolumn 名称相同时,MyBatis 会自动进行映射。这种情况下,可使用 resultType 而不必显式定义 resultMap

2-1 一对一

实体类

//角色实体类
public class Role {private long role_id;private String role_name;private String role_remarks;
}
//管理员实体类
public class Admin {private long admin_id;private String admin_name;private Role admin_role;//角色对象
}
<resultMap id="mapAdmin" type="Admin"><id property="admin_id" column="admin_id"></id><result property="admin_name" column="admin_name"></result><association property="admin_role" javaType="Role"><id property="role_id" column="role_id"></id><result property="role_name" column="role_name"></result><result property="role_remarks" column="role_remarks"></result></association>
</resultMap>
<select id="AdminMapper" parameterType="Long" resultMap="mapAdmin">SELECT * FROM sf_admin a LEFT JOIN sf_role b ON a.admin_role_id = b.role_id WHERE admin_id = #{admin_id}
</select>

或者

<resultMap id="mapAdmin" type="Admin"><id property="admin_id" column="admin_id"></id><result property="admin_name" column="admin_name"></result><association property="admin_role" resultMap="rolemap" javaType="Role"/>
</resultMap>
<resultMap id="rolemap" type="Role"><id property="role_id" column="role_id"></id><result property="role_name" column="role_name"></result><result property="role_remarks" column="role_remarks"></result>
</resultMap>

2-2 一对多

实体类

//收货地址实体类
public class Address {private long address_id;private String address_name;
}
//用户实体类
public class User {private long user_id;private String user_name;private List<Address> addr_list;
}
<resultMap id="user_addr_map" type="User"><id property="user_id" column="user_id"></id><result property="user_name" column="user_name"></result><collection property="addr_list" ofType="Address"><id property="address_id" column="address_id"></id><result property="address_name" column="address_name"></result></collection>
</resultMap>
<select id="getUserId" parameterType="Long" resultMap="user_addr_map">SELECT * FROM sf_user a RIGHT JOIN sf_address b ON a.user_id = b.address_user_id WHERE user_id = #{user_id}
</select>

2-3 总结

association 用于处理一对一的关系映射,可以嵌套另一个resultMap来进一步细化映射规则。javaType 指定了集合中元素的类型。

collection 用于处理一对多的关系映射,同样支持嵌套resultMap以定义子元素的映射规则。ofType 指定了集合中元素的类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/61902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OEM sql monitoring 类似SQL

不够OEM 全面 select a.inst_id,a.time_since_last_wait_micro,a.last_call_et,a.sql_id,a.sql_hash_value, a.username,a.pdml_enabled,a.pdml_status ,a.prev_sql_id from gv$session a where a.statusACTIVE and a.sql_id is not null and a.username is not null select …

正则表达式灾难:重新认识“KISS原则”的意义

RSS Feed 文章标题整理 微积分在生活中的应用与思维启发 捕鹿到瞬时速度的趣味探索 微积分是一扇通往更广阔世界的门&#xff0c;从生活中学习思维的工具。 数据库才是最强架构 你还在被“复杂架构”误导吗&#xff1f; 把业务逻辑写入数据库&#xff0c;重新定义简单与效率。…

C#基础上机练习题

21.计算500-800区间内素数的个数cn&#xff0c;并按所求素数的值从大到小的顺序排列&#xff0c;再计算其间隔加、减之和&#xff0c;即第1个素数-第2个素数第3个素数-第4个素数第5个素数……的值sum。请编写函数实现程序的要求&#xff0c;把结果cn和sum输出。 22.在三位整数…

【STM32】在 STM32 USB 设备库添加新的设备类

说实话&#xff0c;我非常想吐槽 STM32 的 USB device library&#xff0c;总感觉很混乱。 USB Device library architecture 根据架构图&#xff1a; Adding a custom class 如果你想添加新的设备类&#xff0c;必须修改的文件有 usbd_desc.cusbd_conf.cusb_device.c 需要…

conda下载与pip下载的区别

一、conda下载与pip下载的区别 最重要是依赖关系&#xff1a; pip安装包时&#xff0c;尽管也对当前包的依赖做检查&#xff0c;但是并不保证当前环境的所有包的所有依赖关系都同时满足。 当某个环境所安装的包越来越多&#xff0c;产生冲突的可能性就越来越大。conda会检查当…

多头数(head number);d_model、d_k;词嵌入维度之间的关系;多头是对不同维度的特征分开提取,意义在于将并行执行

目录 多头是对不同维度的特征分开提取,意义在于将并行执行 之后的每头提取的特征仅仅进行矩阵拼接 多头数(head number) d_model、d_k 词嵌入维度之间的关系 词嵌入的维度(d_model)决定了权重矩阵的形状 一、概念解释 二、关系举例说明 多头数,权重矩阵的长度和词…

Mac配置maven环境及在IDEA中配置Maven

Mac配置maven环境及在IDEA中配置Maven 1. 介绍 Maven是一款广泛用于Java等JVM语言项目的工具&#xff0c;它以项目对象模型&#xff08;POM&#xff09;为基础进行项目管理&#xff0c;通过POM文件来定义项目信息和依赖关系。同时&#xff0c;它也是构建自动化工具&#xff0…

Qt中2D绘制系统

目录 一、Qt绘制系统 1.1Qt绘制基本概念 1.2 绘制代码举例 1.3画家 1.3.1 QPainter的工作原理&#xff1a; 1.3.2 自定义绘制饼状图&#xff1a; 1.4画笔和画刷 1.4.1画笔 1.4.2 画刷填充样式 1.5 反走样和渐变 1.6绘制设备 1.7坐标变换 1.8QPainterPath 1.9绘制文…

Centos 7 安装 Docker 最新版本

文章目录 一、卸载旧版本二、安装最新版本docker三、问题解决3.1 启动docker报错3.2 启动容器报错 一、卸载旧版本 #如果之前安装过旧版本的Docker&#xff0c;可以使用下面命令卸载 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest …

C++编程:使用 CUDA 将 RGB 图像转换为灰度图的实例

文章目录 0. 引言1. 实现功能概述2. 完整代码3. 代码解释3.1 CUDA 核心逻辑3.2 主机端逻辑3.3 OpenCV 图像处理 4. 编译与运行 0. 引言 本文将以一个简单的例子展示如何使用 CUDA 将 RGB 图像转换为灰度图&#xff0c;并结合 OpenCV 完成图像的加载与保存。 1. 实现功能概述 …

运维Tips:Docker或K8s集群拉取Harbor私有容器镜像仓库配置指南

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] Docker与Kubernetes集群拉取Harbor私有容器镜像仓库配置 描述:在现在微服务、云原生的环境下,通常我们会在企业中部署Docker和Kubernetes集群,并且会在企业内部搭建Harbor私有镜像仓库以保证开发源码安全,以及加快…

2022年计算机网络408考研真题解析

第一题&#xff1a; 解析&#xff1a;网络体系结构-数据链路层 在ISO网络参考模型中&#xff0c;运输层&#xff0c;网络层和数据链路层都实现了流量的控制功能&#xff0c;其中运输层实现的是端到端的流量控制&#xff0c;网络层实现的是整个网络的流量控制&#xff0c;数据链…

鸿蒙NEXT开发案例:文字转拼音

【引言】 在鸿蒙NEXT开发中&#xff0c;文字转拼音是一个常见的需求&#xff0c;本文将介绍如何利用鸿蒙系统和pinyin-pro库实现文字转拼音的功能。 【环境准备】 • 操作系统&#xff1a;Windows 10 • 开发工具&#xff1a;DevEco Studio NEXT Beta1 Build Version: 5.0.…

使用sk-learn 理解TF-IDF

TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xff09;是一种常用的文本挖掘技术&#xff0c;用于评估一个词语在一组文档中的重要性。它广泛应用于信息检索和文本挖掘中&#xff0c;尤其是在搜索引擎和推荐系统中。 组成部分 TF-IDF 由两个部分组成&…

【漏洞复现】|百易云资产管理运营系统/mobilefront/c/2.php前台文件上传

漏洞描述 湖南众合百易信息技术有限公司&#xff08;简称&#xff1a;百易云&#xff09;成立于2017年是一家专注于不动产领域数字化研发及服务的国家高新技术企业&#xff0c;公司拥有不动产领域的数字化全面解决方案、覆盖住宅、写字楼、商业中心、专业市场、产业园区、公建、…

408数据结构:栈、队列和数组选择题做题笔记

408数据结构 第一章 绪论 第二章 线性表 绪论、线性表选择题做题笔记 第三章 栈、队列和数组 栈、队列和数组选择题做题笔记 文章目录 408数据结构前言 一、队列二、栈和队列的应用总结 前言 本篇文章为针对王道25数据结构课后习题的栈、队列和数组的做题笔记&#xff0c;后续…

临床检验方法与仪器 第四部分作业:细胞及分子生物学检验仪器

临床检验方法与仪器 第四部分作业 调研“细胞及分子生物学检验仪器”中哪些有国产品牌&#xff0c;说明产品类型及名称&#xff0c;并分析我国产品与国际品牌产品的优势和不足。如果只有国外产品&#xff0c;请说明主要品牌名称和产品优势。 细胞及分子生物学检验仪器包括&…

快速排序&Lambda表达式

快速排序 912. 排序数组 #include <iostream> #include <vector> #include <ctime> #include <algorithm> // 用于交换函数swapusing namespace std;class Solution { public:// 函数功能&#xff1a;对给定数组nums的指定区间[l, r]进行划分操作&am…

网络层协议IP

对于网络层我们直接通过IP协议来了解其内容 一.IP协议 首先我们先来了解几个概念&#xff1a; 主机&#xff1a;配有IP地址&#xff0c;但是不进行路由控制的设备 路由器&#xff1a;配有IP地址&#xff0c;同时进行路由控制的设备 节点&#xff1a;主机和路由器的统称 所以现在…

cryptography与zlib系列:数据分块解密与解压

cryptography与zlib系列&#xff1a;数据分块解密与解压 数据分块压缩与加密可以查看我的另外一篇博客&#xff0c;这里与之相对应的是解密与解压的操作。解压之后的数据转为BytesIO对象用于后续读取&#xff0c;适用于大部分数据格式&#xff0c;而不需要从文件中读取。 完整…