xml的映射文件中获取接口方法中传来的参数是直接用#{}的方式来获取的
那么接下来,我们就具体来说一下获取参数里边的各种规则和用法
1.单个参数,比如上面的getOneUser,只有一个id值作为参数
Mybatis对于只有一个参数的情况下,不会做任何处理,其实在getOneUser方法中,我们传递过来一个id值作为参数,xml文件中我们用#{id}来接收,因为只有一个参数实质上#{}里可以是任何字符串都可以,当然为了对应我们建议就用id。
2.多个参数的情况下,Mybatis会将参数封装为一个Map对象,#{}其实内部是从这个Map对象中获取数值,所以#{}里就不能像上面一个参数一样写任意字符串都可以了,可以有两种写法一种是:参数1对应param1,参数2对应param2.....另一种写法:参数1对应索引arg0,参数2对应索引arg1.......
测试
当然这种写法,没有和接口方法中的名字对应起来,不爽!所以我们可以在接口方法中做点事情:加上一个@param(value)这样的注解,就可改变封装的map对象的key值,就可以实现接口方法里的参数名和xml文件内接收参数名对应一致了:
面对多个参数传递的问题,我们还有一种搞法,将多个参数值封装为一个POJO对象,直接传递对象过来就像上面的 addUser方法一样,在xml文件里直接用#{POJO的属性名称}的形式来获取传过来的值,当然你说我要查询的数据不是我们model包里的任何一个POJO呢?要用这种方式,没有对应的POJO,我们可以自己构造一个与参数对应的封装对象,这个我们后面写分页查询的时候用的Pager类就是一个典型:
最后还有一种做法:既然面对多个参数传递的时候,Mybatis会把参数封装成Map对象,那么索性我干脆就传入一个Map对象也是可以的,xml文件里获取参数值就用#{Map的key值}: