这篇文章主要讲述Mybatis当中xml映射文件参数传递的方式,本篇文章主要来源于官方文档整理,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
首先需要知道的是不管他传入的是单个参数还是多个参数,Mybatis内部当中都是以Map形式给我们传递到映射文件当中的。
mybatis不会做特殊处理,#{参数名/任意名}:取出参数值。
接口单个参数名称为lastName1,而xml当中使用 #{任意名称} 照样可以接到值
public Employee getEmpByLastNameLikeReturnMap(String lastName1);
xml映射文件
<select id="getEmpByLastNameLikeReturnMap" resultType="com.gzl.mybatis.bean.Employee">
select * from tbl_employee where last_name like #{lastName}
</select>
mybatis会做特殊处理,多个参数会被封装成 一个map。
key:param1…paramN,或者参数的索引也可以
value:传入的参数值
接口当中的抽象方法
public Employee getEmpByIdAndLastName(Integer id,String lastName);
由于传参的时候并没有固定名称,Mybatis会自动生成key名称,xml映射文件当中如果想要引用接口传递的参数只能通过mybatis生成好的key值来获取传递的值。
<select id="getEmpByIdAndLastName" resultType="com.gzl.mybatis.bean.Employee">
select * from student where id = #{param1} and last_name=#{param2}
</select>
通过@Param注解来指定key值
接口当中的抽象方法
public Employee getEmpByIdAndLastName(@Param("id")Integer id,@Param("lastName")String lastName);
xml映射文件
<select id="getEmpByIdAndLastName" resultType="com.gzl.mybatis.bean.Employee">
select * from student where id = #{id} and last_name=#{lastName}
</select>
固定了key值名称,我们也照样可以通过#{parm1}、#{parm2}的形式调用
如果多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入pojo
接口当中的抽象方法
public Employee getEmpByPojo(Employee employee);
xml映射文件当中取值直接#{POJO对象里面的属性名称}即可
<select id="getEmpByPojo" resultType="com.gzl.mybatis.bean.Employee">
select * from student where id = #{id} and last_name=#{lastName}
</select>
如果多个参数不是业务模型中的数据,没有对应的pojo,不经常使用,为了方便,我们也可以传入map
#{key}:取出map中对应的值
接口当中的抽象方法
public Employee getEmpByMap(Map<String, Object> map);
<select id="getEmpByPojo" resultType="com.gzl.mybatis.bean.Employee">
select * from student where id = #{id} and last_name=#{lastName}
</select>
如果是Collection(List、Set)类型或者是数组,也会特殊处理。也是把传入的list或者数组封装在map中。
key:Collection(collection),如果是List还可以使用这个key(list),数组(array)
接口当中的抽象方法
public Employee getEmpById(List<Integer> ids);
取值:取出第一个id的值: #{list[0]}
接口当中传了一个参数和一个pojo的时候
public Employee getEmp(Integer id,@Param("e")Employee emp);
取值:id==>#{param1} lastName===>#{param2.lastName/e.lastName}
以上映射文件当中都没有使用parameterType来指定传入值的类型,这个是可以省略的,不管任何类型都可以省略。
参数多时会封装map,为了不混乱,我们可以使用@Param来指定封装时使用的key
#{key}就可以取出map中的值