传参在mybatis的sql映射文件中正确获取

1、单个参数:
非自定义对象
传参:getStuById(Integer id);
取值:#{id}
单个基本类型参数,随便取值都行;#{ok}
对象:
传参:saveStudent(Student student)
取值:#{属性名}

2、多个参数:
传参:getStudentByLastNameAndAge(String lastName,Integer age)
取值:#{参数名}不好使;报错提示可用的参数是[0,1,param1,param2]
可用的取值方式:
1)#{参数索引} #{0} #{1}
2)#{param参数第几个} #{param1} #{param2}
原因:一但方法传入了多个参数以后,mybatis会进行一个处理;把这些参数全部放在一个map中;
map中的key就是参数的索引,或者是param1...N

3、命名参数:我们可以使用@Param注解来指定mybatis在给多个参数封装map的时候,这个参数使用的key;默认参数索引或者paramx
传参:public Student getStudentByLastNameAndAge(@Param("lastName")String lastName,@Param("age")Integer age);
取值:#{命名的参数名}或者#{paramx}


什么时候用基本类型传参:不将参数封装成pojo直接传给mybatis;很少用到;
有些方法的参数是业务无关的;



4、POJO:我们这么建议;如果我们传递的参数正好是业务逻辑定义的pojo,就用pojo;
传参:saveStudent(Student student);
取值:#{属性名}

5、Map(集合);
传参:public Student getStuByLastNameAndAge(Map<String, Object> map);
取值:#{key}

不管传什么?如果单个参数,mybatis直接就拿来用,如果多个参数,mybatis会将多个参数封装进一个map中,
封装参数用的key默认是0,1,paramx。。。,我们可以使用@Param("key")为这个参数指定一个新的key

传参: getStudent(@Param("stu")Student stu,@Param("map")Map<String,Object> hahamap,@Param("lastName")String lastName);
取值:
取值student对象中的age值:#{param1.age}===#{stu.age}
取值hahamap中的email:#{param2.email}===#{map.email}
取值lastName:#{param3}===#{lastName}

POJO,Map怎么选择?
业务逻辑中定义的POJO我们就使用它,有比较多临时的参数,并不是某个javaBean的,可以为了方便将其封装一个map传递。

TO:(Transfer Object)(专门用它来传递数据的)
POJO:(普通的java类)
DO:(Domain Object)对象模型
DTO:Data Transfer Object:数据传输对象
DAO:Data Access Object:数据访问对象
VO:Value Object:值对象;

原文地址:https://www.cnblogs.com/limingxian537423/p/7465540.html