Mybatis系列四:映射文件-参数处理

向右看齐 2022-04-24 08:28 278阅读 0赞

一、单个参数:mybatis不会做特殊处理。#{参数名}#{任意名}:取出参数值。
 方法:public Employee getEmpById(Integer id);

  1. <select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee">
  2. select * from tbl_employee where id = #{id}
  3. </select>
  4. <select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee">
  5. select * from tbl_employee where id = #{idaaa}
  6. </select>

二、多个参数:mybatis会做特殊处理。不能使用#{参数名}取出参数值。多个参数会被封装成 一个map,
 key:param1…paramN,或者参数的索引也可以
 value:传入的参数值
 #{}就是从map中获取指定的key的值;
 方法:public Employee getEmpByIdAndLastName(Integer id,String lastName);

  1. <select id="getEmpByIdAndLastName" resultType="com.atguigu.mybatis.bean.Employee">
  2. select * from tbl_employee where id = #{param1} and last_name=#{param2}
  3. </select>
  4. <select id="getEmpByIdAndLastName" resultType="com.atguigu.mybatis.bean.Employee">
  5. select * from tbl_employee where id = #{0} and last_name=#{1}
  6. </select>

三、命名参数:@Param明确指定封装参数时map的key。多个参数会被封装成 一个map,
 key:使用@Param注解指定的值
 value:参数值
#{指定的key}取出对应的参数值;
public Employee getEmpByIdAndLastName(@Param("id") Integer id,@Param("lastName") String lastName);

  1. <select id="getEmpByIdAndLastName" resultType="com.atguigu.mybatis.bean.Employee">
  2. select * from tbl_employee where id = #{id} and last_name=#{lastName}
  3. </select>

POJO:
 如果参数很多,并且正好是实体中的属性,我们就可以直接传入实体对象;因为实体会被转为一个key是属性名,value是属性值的map。
如:public Employee getEmpByIdAndLastName(Employee employee);
#{属性名}:取出传入的实体对象的属性值

  1. <select id="getEmpByIdAndLastName" resultType="com.atguigu.mybatis.bean.Employee">
  2. select * from tbl_employee where id = #{id} and last_name=#{lastName}
  3. </select>

Map:
 如果多个参数实体中的属性,不经常使用,我们也可以传入map。
如:public Employee getEmpByIdAndLastName(Map map);

  1. Map map = new HashMap();
  2. map.put("id","1");
  3. map.put("lastName","jerry4");

 #{key}:取出map中对应的值

  1. <select id="getEmpByIdAndLastName" resultType="com.atguigu.mybatis.bean.Employee">
  2. select * from tbl_employee where id = #{id} and last_name=#{lastName}
  3. </select>

TO:
 如果多个参数不是实体中的属性,但经常要使用,推荐来编写一个TO(Transfer Object)数据传输对象。如:

  1. Page{
  2. int index;
  3. int size;
  4. }

案例:
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]}

发表评论

表情:
评论列表 (有 0 条评论,278人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MyBatis参数映射

    > MyBatis的参数映射不同于字段映射,参数映射中的"参数"是指传入SQL语句的参数,而字段映射指的是将JDBC ResultSets数据映射成JavaBean。 My