(五)Mybatis当中xml映射文件参数传递的方式

这篇文章主要讲述Mybatis当中xml映射文件参数传递的方式,本篇文章主要来源于官方文档整理,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
首先需要知道的是不管他传入的是单个参数还是多个参数,Mybatis内部当中都是以Map形式给我们传递到映射文件当中的。

目录

    • 1、单个参数
    • 2、多个参数
      • 不固定key值的情况
      • 固定key值的情况
    • 3、POJO
    • 4、Map
    • 5、list集合
    • 6、特殊情况
    • 注意

1、单个参数

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>

2、多个参数

不固定key值的情况

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>

固定key值的情况

通过@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}的形式调用

3、POJO

如果多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入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>

4、Map

如果多个参数不是业务模型中的数据,没有对应的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>

5、list集合

如果是Collection(List、Set)类型或者是数组,也会特殊处理。也是把传入的list或者数组封装在map中。
key:Collection(collection),如果是List还可以使用这个key(list),数组(array)
接口当中的抽象方法

public Employee getEmpById(List<Integer> ids);

取值:取出第一个id的值: #{list[0]}

6、特殊情况

接口当中传了一个参数和一个pojo的时候

public Employee getEmp(Integer id,@Param("e")Employee emp);

取值:id==>#{param1} lastName===>#{param2.lastName/e.lastName}

注意

以上映射文件当中都没有使用parameterType来指定传入值的类型,这个是可以省略的,不管任何类型都可以省略。
参数多时会封装map,为了不混乱,我们可以使用@Param来指定封装时使用的key
#{key}就可以取出map中的值

你可能感兴趣的:(#,MyBatis,java)