首页 > 其他分享 >MyBatis映射文件配置:入参详解

MyBatis映射文件配置:入参详解

时间:2024-12-12 13:42:21浏览次数:6  
标签:Map name 入参 详解 参数 user MyBatis sex

MyBatis映射文件配置:入参详解

MyBatis 是一个优秀的持久层框架,它简化了数据库操作的复杂性,尤其是在处理 SQL 语句和 Java 对象之间的映射时。在 MyBatis 中,映射文件的配置是非常重要的一部分,尤其是如何正确地处理 SQL 语句的入参。本文将详细介绍 MyBatis 映射文件中入参的配置方式,帮助开发者更好地理解和使用 MyBatis。


1. parameterType 属性

在 MyBatis 的映射文件中,parameterType 属性用于指定 SQL 语句的入参类型。虽然这个属性是可选的,但在某些情况下,明确指定参数类型可以帮助 MyBatis 更好地处理参数。

  • 可选性:MyBatis 可以通过类型处理器(TypeHandler)自动推断参数类型,因此 parameterType 属性是可选的。
  • 支持的参数类型
    • 基本数据类型(如 intString 等)
    • 包装类(如 IntegerString 等)
    • 实体类(POJO)
    • Map

2. 单个参数的入参处理

当接口方法传入单个参数时,MyBatis 的处理非常简单。

示例:
// 接口方法
User queryById(Integer id);
<!-- 映射文件 -->
<select id="queryById" resultType="User" parameterType="int">
    select user_name AS userName from user where id = #{id}
</select>
  • 说明
    • 在 XML 中,可以使用任意变量名(如 #{id})来接收参数。
    • 建议使用与参数名一致的变量名,以提高代码的可读性。

3. 多个参数的入参处理

当接口方法传入多个参数时,MyBatis 的处理稍微复杂一些。默认情况下,MyBatis 会将多个参数封装为一个 Map,并使用参数的索引或位置来访问这些参数。

示例:
// 接口方法
List<User> findUsersByUserNameAndSex(String name, String sex);
<!-- 映射文件 -->
<select id="findUsersByUserNameAndSex" resultType="User">
    select * from user where user_name = #{param1} and sex = #{param2}
</select>
  • 问题
    • 直接使用参数名(如 #{name})会导致 Parameter 'name' not found 的错误。
解决方案:
  1. 使用参数索引

    • 通过 arg0arg1param1param2 来访问参数。
    • 示例:
      <select id="findUsersByUserNameAndSex" resultType="User">
          select * from user where user_name = #{arg0} and sex = #{arg1}
      </select>
      
  2. 使用命名参数

    • 在接口方法中使用 @Param 注解为参数命名,然后在 XML 中使用这些名称。
    • 示例:
      List<User> findUsersByUserNameAndSex(@Param("name") String name, @Param("sex") String sex);
      
      <select id="findUsersByUserNameAndSex" resultType="User">
          select * from user where user_name = #{name} and sex = #{sex}
      </select>
      
  • 推荐方式:使用 @Param 注解为参数命名,这种方式更直观且易于维护。

4. POJO 参数的入参处理

当接口方法传入一个 POJO 对象时,MyBatis 可以直接通过对象的属性名来访问参数。

示例:
// 接口方法
void saveUser(User user);
<!-- 映射文件 -->
<insert id="saveUser">
    insert into user values(null, #{username}, #{age}, #{birthday}, #{sex}, #{address})
</insert>
  • 说明
    • 在 XML 中,使用 #{属性名} 可以直接访问 POJO 对象的属性值。
    • 属性名必须与 POJO 类中的字段名一致。

5. Map 参数的入参处理

当接口方法传入一个 Map 对象时,MyBatis 可以通过 Map 的键名来访问参数。

示例:
// 接口方法
List<User> queryByNameAndSex(Map<String, String> map);
<!-- 映射文件 -->
<select id="queryByNameAndSex" resultType="User" parameterType="map">
    select * from user where user_name = #{name} and sex = #{sex}
</select>
  • 说明
    • 在 XML 中,使用 #{key} 可以直接访问 Map 中的值。
    • 键名必须与 Map 中的键一致。

6. 注意事项

  1. 单个参数

    • 可以使用任意变量名接收参数,但建议使用与参数名一致的变量名。
  2. 多个参数

    • 推荐使用 @Param 注解为参数命名,避免使用参数索引或位置。
  3. POJO 参数

    • XML 中的参数名必须与 POJO 类中的属性名一致。
  4. Map 参数

    • XML 中的参数名必须与 Map 中的键名一致。

7. 总结

MyBatis 提供了多种方式来处理 SQL 语句的入参,开发者可以根据实际情况选择合适的方式:

  • 单个参数:简单直接,使用任意变量名接收。
  • 多个参数:推荐使用 @Param 注解为参数命名,避免参数索引或位置的混乱。
  • POJO 参数:通过属性名直接访问对象的属性。
  • Map 参数:通过键名直接访问 Map 中的值。

通过合理地配置 parameterType 和使用注解,可以大大提高 MyBatis 的开发效率和代码的可维护性。


希望本文能帮助您更好地理解和使用 MyBatis 的入参配置。如果您有任何问题或建议,欢迎留言讨论!

标签:Map,name,入参,详解,参数,user,MyBatis,sex
From: https://www.cnblogs.com/itcq1024/p/18602254

相关文章

  • Linux—软件包管理中APT工具详解
    本文为UbuntuLinux操作系统-第11弹~~今天接着讲昨天没讲完的知识点,主要内容是Linux软件包管理中的APT工具的详细运用知识~上期回顾:Linux—软件包管理概念及Deb软件包使用更多Linux相关内容点击......
  • SpringBoot项目实战(37)--使用Beetl模板实现代码生成器(六)-- 完整的Mybatis-plus低代码生
        在上文中介绍了Mybatis-plus增删改查的整套代码。本文利用上文的整套代码改造Beetl代码模版,并依据这些模版,选择一个数据库表生成增删改查相关的程序代码。 一、数据库表    因为上文用了comm_api_key作为代码模板,已经有了一套示例代码,本文使用另外的数......
  • PySide 信号与槽机制详解
    PySide信号与槽机制详解引言PySide是一个用于创建跨平台桌面应用程序的Python绑定库,它封装了Qt库的功能。Qt的核心特性之一是它的信号与槽(SignalsandSlots)机制,这是一种对象间通信的方法。在PySide中,这种机制允许开发者轻松地连接用户界面元素的行为和应用程序......
  • Java多线程与线程池技术详解(九)
    面对苦难的态度:《病隙碎笔》“不断的苦难才是不断地需要信心的原因,这是信心的原则,不可稍有更动。”孤独与心灵的成长:《我与地坛》“孤独的心必是充盈的心,充盈得要流溢出来要冲涌出去,便渴望有人呼应他、收留他、理解他。”目录上一篇博客习题讲解使用ReentrantLock实现......
  • springboot+mybatis plus+vue+elementui+axios 表格分页
    1、创建springboot项目2、pom.xml里面添加依赖<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>......
  • Spring框架IoC核心详解
    介绍IoC(InversionofControl:控制反转)是一种设计思想,而不是一个具体的技术实现。IoC的思想就是将原本在程序中手动创建对象的控制权,交由Spring框架来管理,由Spring容器管理bean的整个生命周期。通俗来说就是IoC是设计思想,DI是实现方式。通过反射实现对其他对象的控制,包括初......
  • 二十、作业详解(1)
    一、如何把函数处理结果的两个数据返回给主调函数1.形参用数组2.形参用两个指针3.用两个全局变量return只能返回一个数二、函数可以嵌套调用,但不能嵌套定义三、参数个数exec((v1,v2),(v3,v4),v5,v6);        //函数有v2,v4,v5,v6这4个参数四、函数设计......
  • ### 最大化相邻字符ASCII码之差的最小值:C语言实现与详解
    在字符串处理问题中,如何调整字符的排列以最大化相邻字符ASCII码之差的最小值是一个有趣的挑战。本文将通过一个具体的C语言实现,带你了解这一问题的解决思路和代码细节。####问题描述给定一个字符串,通过调整其字符顺序,使得字符串中任意相邻字符ASCII码之差的最小值最大。###......
  • 23. C++STL 9 (priority_queue的使用和适配实现详解)
    ⭐本篇重点:1priority_queue的使用与底层原理2使用容器来适配priority_queue⭐本篇代码:c++学习·橘子真甜/c++-learning-of-yzc-码云-开源中国(gitee.com)⭐标⭐是比较重要的部分目录一.priority_queue(优先级队列)的使用与原理1.1priority_queue的底层原理......
  • 位置编码祛魅 | 详解Transformer中位置编码Positional Encoding
    往期精彩内容:Python-凯斯西储大学(CWRU)轴承数据解读与分类处理基于FFT+CNN-BiGRU-Attention时域、频域特征注意力融合的轴承故障识别模型-CSDN博客基于FFT+CNN-Transformer时域、频域特征融合的轴承故障识别模型-CSDN博客Python轴承故障诊断(11)基于VMD+CNN-BiG......