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

MyBatis 中 parameterType 属性

MyBatis 中 parameterType 属性的核心解析

一、属性定义

parameterType 是 MyBatis 映射文件(XML)中用于指定 SQL 语句输入参数类型的类型(可以使普通java类型也可以是Pojo实体类),主要作用于 <insert>, <update>, <delete>, <select> 等 CRUD 标签。

二、核心作用
  1. 类型识别
    框架通过此属性确定如何解析参数对象:
    • 基本类型处理(int/String 等)
    • POJO 对象属性映射
    • Map 键值对处理
    • 集合类型处理
  1. 类型转换
    自动处理 JDBC 类型与 Java 类型的映射关系
三、使用场景与示例

注意:如果参数是 唯一的且无 @Param 注解,MyBatis 会自动解构对象属性,允许直接写 #{属性名}

场景 1:基本数据类型
<select id="findByAge" parameterType="int" resultType="User">SELECT * FROM users WHERE age = #{value}
</select>
场景 2:POJO 对象
<insert id="insertUser" parameterType="com.example.User">INSERT INTO users(name,email) VALUES(#{name}, #{email})
</insert>
场景 3:Map 参数
<select id="search" parameterType="map" resultType="User">SELECT * FROM users WHERE name = #{nameKey} AND age = #{ageKey}
</select>
四、现代用法演进
  1. 类型自动推断(MyBatis 3.4.5+)
    以下情况可省略 parameterType
<!-- 自动识别为String类型 -->
<select id="findByName" resultType="User">SELECT * FROM users WHERE name = #{name}
</select>
  1. 多参数方法
    使用 @Param 注解时无需声明:
List<User> findByConditions(@Param("name") String name,@Param("minAge") int minAge
);
<select id="findByConditions" resultType="User">SELECT * FROM users WHERE name = #{name} AND age > #{minAge}
</select>
五、特殊类型处理

参数类型

处理方式

集合/数组

使用 <foreach> 遍历

枚举类型

需实现 TypeHandler 接口

自定义对象

直接访问对象属性

六、最佳实践建议
  1. 显式声明场景
    当出现以下情况时建议保留:
<!-- 多参数未使用@Param时需声明为map -->
<select id="multiParamSearch" parameterType="map">...
</select>
  1. 类型安全校验
    复杂业务场景显式声明可增强可读性:
<update id="updateProfile" parameterType="com.example.ProfileDTO">...
</update>
  1. 性能优化
    明确指定类型可跳过类型推断过程:
<!-- 明确基本类型提升效率 -->
<delete id="deleteById" parameterType="long">DELETE FROM users WHERE id = #{id}
</delete>
七、常见误区
  1. resultType 混淆
    • parameterType:输入参数类型
    • resultType:输出结果类型
  1. 过度依赖自动推断
    复杂对象嵌套时显式声明更可靠
  2. @Param 冲突
    当使用注解指定参数名时,parameterType 实际类型应为 map

通过合理运用 parameterType,可以提升 SQL 映射的清晰度和执行效率,但在现代 MyBatis 版本中更推荐采用类型推断机制保持代码简洁。

相关文章:

  • el-form表单规则验证
  • 机器学习 Day1
  • G1人形机器人软硬件组成
  • 什么是HTTP
  • [SWPUCTF 2024 秋季新生赛]ret2libc也阴嘛?(NSSCTF)
  • 公司内网本地的SVN没有公网IP地址,在家外网也能远程访问SVN服务!
  • 1.2.1+1.2.2计算机硬件的基本组成
  • Vue3中的TSX:用函数式思维构建现代组件的实践指南
  • 初识main函数
  • 深度学习模型可视化:Netron的安装和使用
  • Spring源码编译
  • Ensp --四路由练习
  • 日拱一卒【6】
  • 【agent】简历信息提取智能体
  • C++11新特性(2)
  • DETR3D- 3D Object Detection from Multi-view Images via 3D-to-2D Queries
  • 20250523-在Unity中创建角色动画(2D)(Set up Animator with State Machine)
  • Makefile快速入门
  • PCB设计实践(二十五)贴片电阻与插件电阻的全面解析:差异、演进与应用场景
  • Python打卡第34天
  • 网站制作说明书/建站系统主要包括
  • 网站建设验收/怎么学seo基础
  • 有赞商城官网登录/seo推广效果怎么样
  • 国外网站配色/福州网站优化公司
  • 福建省住房和城乡建设厅网站首页/简单的个人主页网站制作
  • 做网站做手机站还是自适应站/关键词排名工具