《Mybatis学习-6》mybatis映射文件中参数的处理

135 阅读2分钟

单个参数

mybatis不会做特殊处理 ,查询时名字是不影响的(sql语句中的参数名和接口中方法的参数名可以不同)

 #{}:取出参数值 

 

多个参数

mybatis 会做特殊处理;多个参数会被分装成一个map

key: param1....paramN,或者参数的索引也可以(0,1,2,,,,N)

value:传入的参数值    

 #{}就是从 map中获取指定的key的值

方法: Employee getEmpById(Integer id,String name);

映射文件中的sql:

错误的sql:select * from employee where id = #{id} and name = #{name}

正确的sql:select * from employee where id = #{param1} and name=#{param2}     

大家可以试一下错误sql,看看是什么原因。

 

命名参数

明确指定封装参数时的map的key ;可以不需要使用param1,param2了。

@Param("id")

多个参数会被封装成一个map,

key:使用@param()注解指定的值

value:参数值

 #{指定的key}取出对应的参数值

方法: Employee getEmpById(@Param("id")Integer id,@Param("name")String name);

映射文件中的sql: select * from employee where id = #{id} and name=#{name}   

 

POJO

如果多个参数正好是我们业务逻辑的数据类型,我们就可以直接传入pojo;

#{属性名}:取出传入的pojo的属性值

 

Map

如果多个参数不是业务模型中 的数据,没有对应的pojo,为了方便,传入map

方法: public void getMap(Map(Stirng ,object) map);

#{key}: 取出map中对应的值

 

TO

如果多个参数不是业务模型中 的数据,但是经常使用,推荐编写一个TO(Transfer object) 数据传输对象    

分页:

Page{

        int index;

        int size;

 

#特别注意:

如果是Collection(list,set)类型或者是数组,

即使是单一参数,也会被特殊处理,也是把传入的值封装在map中

如果是List ,那么就是#{list[0]}

方法:Employee getEmpById(List<Integer> ids);

取值:#{list[0]}  (取出第一个id的值)