mybatis 参数处理,单个参数,多个参数

mybatis 参数处理,单个参数,多个参数

2017年09月04日 23:36:37

阅读数:1400

1、单个参数

mybatis不做特殊处理。#{参数名}即可取出值,参数名随意取

2、多个参数

mybatis会将其封装成map,

key:param1,param2,。。。paramN,或参数的索引

value:传入的参数值

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

例如:

接口为:public Employee getEmpByIdAndLastName(Integer id, String lastName);

sql:select id,last_name lastName,email,gender where id=#{id} and last_name=#{lastName}

此时会报错:Parameter 'id' not found. Available parameters are [0, 1, param1, param2]

此时需要改写成

select id,last_name lastName,email,gender from tbl_employee where id=#{param1} and last_name=#{param2}

select id,last_name lastName,email,gender from tbl_employee where id=#{0} and last_name=#{1}

这样虽然可以实现,但是对于程序的阅读性不好。

1、参数命名法:使用@Param注解

明确key为@Param注解指定的值,value为参数值。

例如

public Employee getEmpByIdAndLastName(@Param("id")Integer id, @Param("lastName")String lastName);

此时就可以写成如下语句了

 select id,last_name lastName,email,gender from tbl_employee where id=#{id} and last_name=#{lastName}

 
  1. Employee employee = employeeMapper.getEmpByIdAndLastName(1, "tom");

  2. System.out.println(employee);

2、POJO:传入一个对象(业务中的模型数据bean)

#{属性名},取出pojo的属性值。

接口:public Employee getEmpByEmp(Employee employee);

此时就可以写成如下语句了

 select id,last_name lastName,email,gender from tbl_employee where id=#{id} and last_name=#{lastName}

 
  1. Employee employeeParam = new Employee();

  2. employeeParam.setId(2);

  3. employeeParam.setLastName("jerry");

  4. Employee empByEmp = employeeMapper.getEmpByEmp(employeeParam);

  5. System.out.println(empByEmp);

3、Map:传入一个map参数(无已有bean可用)

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

 接口:public Employee getEmpByMap(Map<String, Object> paraMap);

此时就可以写成如下语句了

 select id,last_name lastName,email,gender from tbl_employee where id=#{id} and last_name=#{lastName}

 
  1. Map<String, Object> paraMap = new HashMap<String, Object>();

  2. paraMap.put("id", 3);

  3. paraMap.put("lastName", "limei");

  4. Employee empByMap = employeeMapper.getEmpByMap(paraMap);

  5. System.out.println(empByMap);

注:如果经常使用,可以编写一个TO(Transfer Object)传输对象

例如

Page{

int index;

int size;

}

=====================

public Employee getEmp(@Param("id")Integer id,String lastName);
取值:id==>#{id/param1}   lastName==>#{param2}


public Employee getEmp(Integer id,@Param("e")Employee emp);
取值:id==>#{param1}    lastName===>#{param2.lastName/e.lastName}


##特别注意:如果是Collection(List、Set)类型或者是数组,
也会特殊处理。也是把传入的list或者数组封装在map中。
key:Collection(collection),

如果是List还可以使用这个key(list)数组(array)
public Employee getEmpById(List<Integer> ids);
取值:取出第一个id的值:   #{list[0]}

猜你喜欢

转载自blog.csdn.net/f45056231p/article/details/81276398