Mybatis系列四:映射文件-参数处理
一、单个参数:mybatis不会做特殊处理。#{参数名}
或#{任意名}
:取出参数值。
方法:public Employee getEmpById(Integer id);
<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee">
select * from tbl_employee where id = #{id}
</select>
<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee">
select * from tbl_employee where id = #{idaaa}
</select>
二、多个参数:mybatis会做特殊处理。不能使用#{参数名}
取出参数值。多个参数会被封装成 一个map,
key:param1…paramN,或者参数的索引也可以
value:传入的参数值
#{}就是从map中获取指定的key的值;
方法:public Employee getEmpByIdAndLastName(Integer id,String lastName);
<select id="getEmpByIdAndLastName" resultType="com.atguigu.mybatis.bean.Employee">
select * from tbl_employee where id = #{param1} and last_name=#{param2}
</select>
<select id="getEmpByIdAndLastName" resultType="com.atguigu.mybatis.bean.Employee">
select * from tbl_employee where id = #{0} and last_name=#{1}
</select>
三、命名参数:@Param明确指定封装参数时map的key。多个参数会被封装成 一个map,
key:使用@Param注解指定的值
value:参数值
#{指定的key}
取出对应的参数值;
public Employee getEmpByIdAndLastName(@Param("id") Integer id,@Param("lastName") String lastName);
<select id="getEmpByIdAndLastName" resultType="com.atguigu.mybatis.bean.Employee">
select * from tbl_employee where id = #{id} and last_name=#{lastName}
</select>
POJO:
如果参数很多,并且正好是实体中的属性,我们就可以直接传入实体对象;因为实体会被转为一个key是属性名,value是属性值的map。
如:public Employee getEmpByIdAndLastName(Employee employee);
#{属性名}
:取出传入的实体对象的属性值
<select id="getEmpByIdAndLastName" resultType="com.atguigu.mybatis.bean.Employee">
select * from tbl_employee where id = #{id} and last_name=#{lastName}
</select>
Map:
如果多个参数实体中的属性,不经常使用,我们也可以传入map。
如:public Employee getEmpByIdAndLastName(Map map);
Map map = new HashMap();
map.put("id","1");
map.put("lastName","jerry4");
#{key}:取出map中对应的值
<select id="getEmpByIdAndLastName" resultType="com.atguigu.mybatis.bean.Employee">
select * from tbl_employee where id = #{id} and last_name=#{lastName}
</select>
TO:
如果多个参数不是实体中的属性,但经常要使用,推荐来编写一个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,Employee emp);
取值:id==>#{param1} lastName===>#{param2.lastName}
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 ids);
取值:取出第一个id的值: #{list[0]}
还没有评论,来说两句吧...