前段时间换工作,我去了一家中型互联网公司面试Java开发。技术面上来就是一通熟悉的问题,Spring、Redis、线程池,我答得如鱼得水。轮到MyBatis,我信心满满,毕竟项目里天天用。
结果,面试官看着我说:“那我问个简单点的吧——在Mapper中,如何传递多个参数?”
当时我还在想,这还不简单?用逗号传呗!但我话到嘴边又卡住了——等等,MyBatis的Mapper接口里,方法参数能随便传多个吗?
于是,我硬着头皮答:“我用Map传的……”
面试官点头,又接着问:
“除了Map,你还用过什么方式?@Param你用过吗?那多个参数不用注解的时候,你知道默认怎么传进去的吗?”
就这样,三个问题连珠炮,我脸上写满了‘别问了,我回去查一下’。
回去之后,我立刻翻源码、看官网、写 demo,才把这个“基础问题”吃透。今天就来跟大家完整讲讲 MyBatis 中传多个参数的方式,顺带结合源码看看 MyBatis 的底层是怎么处理这些参数的。
面试官问的“多个参数”到底是哪种情况?
先回顾一下背景。在 MyBatis 中,我们通常会写一个 Mapper 接口,比如这样:
问题就来了:MyBatis 的 XML 映射文件里,只能通过 #{} 或 ${} 获取参数,而方法参数是多个,怎么取?
这就是我们今天要深入的点。
使用 @Param 注解
这是最标准、最推荐的方式!MyBatis 提供了 @Param 注解,可以为每个参数起一个别名。