MyBatis传递获取参数
MyBatis 参数传递 获取参数完整总结MyBatis 参数本质把 Java 方法入参传入 xml/mapper通过#{}/${}取值底层使用 OGNL 表达式解析。一、#{} 与 ${} 核心区别必记#{param}预编译占位符?防止 SQL 注入绝大多数场景使用${param}直接字符串拼接无预编译有注入风险只用于动态表名、排序字段-- 安全 where name #{name} -- 危险直接拼接 order by ${sortColumn}二、各种传参方式方式 1单个简单参数基本类型 / 包装类 String Integer Longmapper 接口User selectById(Long id);xml直接写参数名即可名字可以任意MyBatis 单参数不校验名字select idselectById resultTypeUser select * from t_user where id #{id} /select注意单个参数#{任意名字}都可以拿到值不匹配也不会报错。方式 2多个普通参数多个入参① 使用 Param企业最常用推荐接口用Param(xxx)指定参数名ListUser selectUser(Param(name) String name, Param(age) Integer age);xml 直接使用注解定义的名字select idselectUser resultTypeUser select * from t_user where if testname ! nulland name like concat(%,#{name},%)/if if testage ! nulland age #{age}/if /where /select② 不使用 Param使用 arg0,arg1 /param1,param2不推荐可读性差where name #{arg0} and age #{arg1} where name #{param1} and age #{param2}生产禁止参数顺序改动直接崩。方式 3POJO 实体对象传参最常用接口int updateUser(User user);User 属性id,name,age xml 直接写属性名update idupdateUser update t_user set if testname!nullname#{name},/if if testage!nullage#{age},/if /set where id#{id} /update#{name}等价于取入参对象的user.getName()OGNL 访问对象属性。方式 4Map 传参接口ListUser selectByMap(MapString,Object params);java 调用MapString,Object map new HashMap(); map.put(name,张三); map.put(age,20); mapper.selectByMap(map);xml 直接取 map 的 keyselect idselectByMap resultTypeUser select * from t_user where if testname ! nulland name#{name}/if if testage ! nulland age#{age}/if /where /select方式 5集合 / 数组参数foreach 场景List 集合ListUser selectByIds(ListLong ids);xml collection 写listforeach collectionlist itemid open( close) separator, #{id} /foreach数组ListUser selectByIds(Long[] ids);xml collection 写arrayforeach collectionarray itemid open( close) separator, #{id} /foreach如果集合放在 POJO 对象属性中class Query{ private ListLong idList; } ListUser select(Query query);collection 写属性名foreach collectionidList itemid如果加了Param(idList)collection 写注解名字。方式 6多参数其中一个是集合ListUser select(Param(status) Integer status,Param(idList) ListLong idList);xmlwhere status #{status} and id in foreach collectionidList itemid open( close) separator, #{id} /foreach三、#{} 内部属性#{name,javaTypeString,jdbcTypeVARCHAR}jdbcType数据库字段类型null 值的时候建议指定部分数据库 (Oracle) 传 null 会报错name #{name,jdbcTypeVARCHAR} age #{age,jdbcTypeINTEGER}javaTypejava 类型一般不需要写mode存储过程用typeHandler自定义类型处理器四、OGNL 表达式if test 里面的语法if test 这里是OGNL表达式不是sql !-- 判断非null并且非空字符串 -- if testname ! null and name !/if !-- 判断数字 -- if testage ! null and age 18/if !-- 对象属性嵌套 -- if testuserVO.deptId ! null/if !-- 调用方法 -- if testname.length()0/if⚠️坑test 里面不要写#{}${}直接写属性名五、返回参数 / 结果映射 resultType /resultMap1.resultType简单映射别名 / 全类名自动把列名和实体属性映射下划线转驼峰需要开启配置select idxxx resultTypecom.xxx.entity.User2.resultMap自定义映射复杂字段、关联查询、字段名不一致手动配置resultMap iduserMap typeUser id columnuid propertyid/ result columnuser_name propertyname/ /resultMap select idxxx resultMapuserMapapplication.yml 开启下划线转驼峰mybatis: configuration: map-underscore-to-camel-case: true六、高频踩坑总结1. 多个参数不加 Param直接写属性名报错找不到参数多个参数必须加Param或者封装对象 /map。2.test中写#{name}OGNL 解析异常test 里面直接写属性不要占位符。3. Oracle 传入 null报错需要指定 jdbcType4. foreach collection 写错不加 Paramlist 集合→list数组→array加 Paramcollection 写注解名字在对象里面写对象属性名5.${}直接拼接注意 SQL 注入禁止直接接收前端传入的表名。6. 单参数xml 参数名可以随便写但是加上 Param 之后必须和注解名字一致。对比 Spring Data JPA 参数MyBatis手动控制参数#{} 预编译灵活JPA?1 ?2或者:name命名参数。

相关新闻

SSM人事管理系统源码详解:数据库设计到项目部署踩坑指南

SSM人事管理系统源码详解:数据库设计到项目部署踩坑指南

简介:这是一套面向Java初学者与SSM框架入门开发者的完整人事管理系统实战源码,适用于课程设计、毕业设计及企业级管理类系统学习。系统基于SpringSpringMVCMyBatis主流整合架构,覆盖用户、部门、职位、员工、公告、下载中心等六大核心模块&am…

2026/11/11 15:19:18 阅读更多 →
C盘又满了?用磁盘可视化分析找出隐藏大文件,彻底释放空间

C盘又满了?用磁盘可视化分析找出隐藏大文件,彻底释放空间

C盘红得发紫的那一天,我盯着资源管理器里的剩余空间,发现数字几乎没怎么动。真相往往藏在一个反直觉的点上:你删了那么多缓存,清理了那么多临时文件,但空间没有回来。原因很简单——真正吃掉C盘的,不是垃圾…

2026/11/9 0:00:30 阅读更多 →
C盘满了怎么办?用cleanmgr、DISM和PowerShell深度清理Windows系统盘

C盘满了怎么办?用cleanmgr、DISM和PowerShell深度清理Windows系统盘

这次我们来看一个几乎所有 Windows 用户都会遇到的问题:C 盘满了。装软件、下缓存、系统更新、休眠文件、临时文件,每一样都在悄悄吃掉系统盘空间。与其装各种第三方“管家”软件,不如直接记住 Windows 自带的清理命令。cleanmgr加DISM&#…

2026/11/8 9:29:03 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/10 23:32:01 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/10 23:32:03 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/11 2:31:33 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/10 16:14:15 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/10 12:51:50 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/10 23:32:10 阅读更多 →

日新闻

周新闻

月新闻