参数传递
一.单参数传递
可以是基本数据类型也可以是对象类型,Mybatis可以直接使用,不需要经过任何处理
ParamMapper接口类:
//单参数处理
public Emp getEmpBiEid(Integer eid);
ParamMapper映射文件:
<!-- 单参数处理:public Emp getEmpBiEid(Integer eid); -->
<select id="getEmpBiEid" resultType="com.bean.Emp">
select eid,ename,age,gender
from emp where eid=#{eid};
</select>
二.多参数传递
任意多个参数都会被Mybatis重新包装成一个Map传入,Map的key识Mybatis版本而定,可能是arg0,arg2或者param0,param1,或者0,1…
//多参数处理
public List<Emp> getEmpByAgeAndGender(Integer age,String gender);
<!-- 多参数处理:public List<Emp> getEmpByAgeAndGender(Integer age,String gender); -->
<select id="getEmpByAgeAndGender" resultType="Emp">
select
eid,ename,age,gender from emp where age=#{arg0} and gender=#{arg1};
</select>
三.命名参数
多参数传递,经Map处理后没有自己指定的参数名,使用不方便,我们可以自己使用@Param为参数起一个名字
//命名参数
public List<Emp> getEmpByGenderAndDid(@Param("gender")String gender,@Param("did")Integer did);
<!-- 命名参数处理:public List<Emp> getEmpByGenderAndDid(@Param("gender")String
gender,@Param("did")Integer did); -->
<select id="getEmpByGenderAndDid" resultType="Emp">
select
eid,ename,age,gender from emp where gender=#{gender} and did=#{did};
</select>
四.多个参数封装到map直接传递
//封装的Map参数
Emp getEmpByMap(Map<String,Object> map);
<!-- Map参数:Emp getEmpByMap(Map<String,Object> map); -->
<select id="getEmpByMap" resultType="Emp">
<!-- 通过键值对确定参数值 -->
select eid,ename,age,gender from emp where eid='${eid}' and
ename='${ename}'
</select>
五.POJO
当这些参数属于我们业务POJO时,我们直接传递
六.Collection/Array
会被Mybatis封装成一个map传入,Collection对应的key是collection,Array对应的key是array.如果确定是List集合,key还可以是list,当然我们也可以通过@Param("")取别名的方式来获取key
//Collection/Array/List参数
public List<Emp> getEmpByAge(List<Integer> ages);
<select id="getEmpByAge" resultType="Emp">
select eid,ename,age,gender from emp where age in
<foreach collection="list" item="age" index="index" open="(" close=")" separator=",">
#{age}
</foreach>
</select>
取别名
//Collection/Array/List参数
public List<Emp> getEmpByAge(@Param("ages")List<Integer> ages);
<select id="getEmpByAge" resultType="Emp">
select eid,ename,age,gender from emp where age in
<foreach collection="ages" item="age" index="index" open="(" close=")" separator=",">
#{age}
</foreach>
</select>