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]}

猜你喜欢

转载自blog.csdn.net/lizhiqiang1217/article/details/89420408
今日推荐