参数传递
Mybatis获取参数值的两种方式:${}和#{}
${}本质字符串拼接(可能造成sql注入)
{}本质占位符赋值
单个参数
可以接受基本类型,对象类型,集合类型的值。
这种情况MyBatis可值接使用这个参数﹐不需要经过任何处理。
如下:
AccountMapper接口中的deleteById方法只有一个参数,MyBatis可值接使用这个参数﹐不需要经过任何处理。
package com.caq.study.mapper; import com.caq.study.entity.Account; public interface AccountMapper { boolean deleteById(Integer id); }
多个参数
任意多个参数,都会被MyBatis重新包装成一个Map传入。
Map的key是param1 , param2 ,paramn
或者传入索引值0,1...,值就是参数的值
多个参数的情况一般不这样传,一般通过注解@Param来给参数命名,这样能做到见名之意
为参数使用@Param起一个名字,MyBatis就会将这些参数封装进map中, key就是我们自己指定的名字
#{key}
里面的key值不能写成原参数名,要么通过@params指定,要么写param1 , param2 ....
多个参数会被封装成一个map
key:使用@Param注解指定的值
value:参数值
{指定的key}取出对应的参数值
POJO
一般增、改数据的时候,我们会直接传入一个实体类(pojo)
当这些参数属于我们业务POJO时,我们直接传递POJO
Map
传递Map的情况适用于多个参数且参数不属于pojo,不经常使用,为了方便,可传入map
DTO
DTO:数据传输对象
传递DTO的情况适用于多个参数且参数不属于pojo,但经常使用,为了方便,可传入DTO
特殊情况
如果我们这样传: Account selectById(@Param("id") Integer id,String name); 取值: id==>#{id/ param1}lastName==>#{param2} 如果是Collection (List、Set)类型或者是数组, 也会特殊处理。也是把传入的list或者数组封装在map中 key: collection (collection),如果是List还可以使用这个key(list) 数组(array) public Employee getEmpById(List<Integer> ids); 取值:取出第一个id的值:#{list[0]}