当前位置: 首页 > ds >正文

MyBatis 笔记:parameterType、resultType 与 resultMap 的区别详解

        在使用 MyBatis 进行数据库操作时,我们经常会在 mapper.xml 中看到 parameterTyperesultTyperesultMap 等属性。它们虽然常见,但对于初学者来说容易混淆。本文将详细解释这三个属性的作用、使用场景与区别,并提供实例帮助理解。


一、parameterType:输入参数类型

  parameterType 用于指定传入 SQL 的参数类型。

常见取值:

  • 基本类型:int, long, String 等;

  • JavaBean 类型:如 User

  • Map<String, Object>

  • 多个参数时推荐配合 @Param("xx") 使用。

示例:

<select id="selectUserById" parameterType="long" resultType="User"> SELECT * FROM user WHERE id = #{id} 
</select>

        传入参数是 Long 类型,用 #{id} 获取。


二、resultType:结果类型(简单映射)

  resultType 表示 SQL 查询结果映射成什么 Java 类型。

常见类型:

  • 基本类型:int, String

  • 实体类:如 User

  • Map<String, Object>

示例:

<select id="getUsername" parameterType="int" resultType="string"> SELECT username FROM user WHERE id = #{id} 
</select>

返回单个字段结果,直接映射成 String 类型。

注意:只有当查询结果的列名与 Java 字段名一致时,resultType 才能自动映射成功。


三、resultMap:自定义映射(推荐使用)

        当数据库字段与 Java 实体类属性名不一致,或者查询结果中包含嵌套对象时,建议使用 resultMap

示例:

        数据库字段是 user_id, user_name,而 Java 实体类是 id, userName

<resultMap id="userMap" type="User"> <id property="id" column="user_id"/> <result property="userName" column="user_name"/> 
</resultMap> 
<select id="selectUser" resultMap="userMap"> SELECT user_id, user_name FROM user 
</select>

        这样就能正确映射到实体类。


四、对比总结

项目位置描述适用场景
parameterType<select>设置 SQL 输入参数类型单个对象/基本类型/Map
resultType<select>设置查询结果的返回 Java 类型字段名与属性名一致,返回简单对象
resultMap<select>自定义映射规则,字段名与属性名不一致或嵌套结构时建议常用,更加灵活

五、建议与实践

在开发过程中:

  • 若字段与实体类属性名完全一致,可用 resultType 简化;

  • 若存在不一致或嵌套关系,强烈建议使用 resultMap,更清晰、灵活;

  • 入参类型最好明确写出,利于阅读与维护;

  • 对于多参数建议使用 @Param 注解提升可读性。


补充:常用 Java 类型对应写法

Java 类型XML 写法
intint
Stringstring
Longlong
Usercom.xxx.model.User
Mapmap


六、结语

        掌握 MyBatis 的这三个核心属性,是写好 SQL 映射的基础。初学时可以先从简单的 resultType 入手,再逐步过渡到 resultMap。希望这篇博客能帮助你扫清这些概念的障碍,为你后续开发打下基础。

http://www.xdnf.cn/news/8429.html

相关文章:

  • Android 网络全栈攻略(四)—— 从 OkHttp 拦截器来看 HTTP 协议一
  • 146. LRU Cache
  • Anthropic公司近日发布了两款新一代大型语言模型Claude Opus 4与Claude Sonnet 4
  • 矩阵:线性代数在AI大模型中的核心支柱
  • 深入解析MySQL中的HAVING关键字:从入门到实战
  • Docker 与 Kubernetes 部署 RabbitMQ 集群(二)
  • C++ 忘掉std::cout吧,fmt和spdlog的结合
  • 达梦数据库-报错-01-[-3205]:全文索引词库加载出错
  • paddle 打包代码 ocr
  • 国产高云FPGA实现MIPI视频解码+图像缩放,基于OV5647摄像头,提供Gowin工程源码和技术支持
  • 04-jenkins学习之旅-java后端项目部署实践
  • 攻略生成模块
  • python邮件地址检验 2024年信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析
  • C++---vector模拟实现
  • 黑马点评-实现安全秒杀优惠券(使并发一人一单,防止并发超卖)
  • Java桌面应用开发详解:自制截图工具从设计到打包的全流程【附源码与演示】
  • LVS + Keepalived + Nginx 高可用负载均衡系统实验
  • 详解Mysql的 Binlog、UndoLog 和 RedoLog
  • 「金融证券行业」 如何搭建自己的研发智能管理体系?
  • Linux 操作文本文件列数据的常用命令
  • @Column 注解属性详解
  • 【Nature子刊聚焦:超构表面多维调控与AI驱动的设计革命 ——2024-2025年超构表面领域突破性进展速览 】
  • 职坐标解析物联网协议与传感器技术实战应用
  • MuJoCo安装记录
  • 一个基于 ESP-IDF 的 RPC over UDP 示例
  • 2025 最新 Redis 面试题大全
  • 探索服务网格(Service Mesh):云原生时代的网络新范式
  • DDR DFI 5.2 协议接口学习梳理笔记01
  • 工业软件国产化:构建自主创新生态,赋能制造强国建设
  • NIST提出新型安全指标:识别潜在被利用漏洞