Mybatis对各种参数的处理

一. Mybatis参数的处理

在正常的开发中,参数可能是单个参数,也可能是多个参数,也可能是实体类的对象,这些是较常见的,还有一些特殊的,比如参数是map键值对,是list,除了map和list之外还有其他的多个参数。

单个参数(Integer empId):单个参数MyBatis不会做任何特殊处理,在SQL映射文件中使用任意的参数名称都可以取得该参数

多个参数(String empName,Integer pageCurrent,Integer pageSIze):

首先我们测试一下多个参数,看情况:

<!-- 
		public List<Emp> selectEmpByEmpNameLike(String empName,Integer startSize,Integer pageSize);
	 -->
	<select id="selectEmpByEmpNameLike" resultType="com.wanbangee.entities.Emp">
		select * from emp where emp_name like #{empName} limit #{startSize},#{pageSize}
	</select>

控制台提示错误信息:

Available parameters are [0, 1, 2, param3, param1, param2]

以上程序运行提示:参数只有0,1,2,param2,param2,param3可用,这是因为在传递多个参数的情况下,MyBatis会将参数自动的封装成Map键值对,而且每一个参数都有两个键和两个值,这两个键不同,但是值相同,以上程序最终封装的键值对如下:

Keyvalue
0第一个参数的值
Param1第一个参数的值
1第二个参数的值
Param2第二个参数的值
2第三个参数的值
param3第三个参数的值

那么在我们的SQl映射文件中,#{键},在执行的时候就会传入相应的键对应的值。如下:

<!-- 
		public List<Emp> selectEmpByEmpNameLike(String empName,Integer startSize,Integer pageSize);
	 -->
	<select id="selectEmpByEmpNameLike" resultType="com.wanbangee.entities.Emp">
		select * from emp where emp_name like #{param1} limit #{1},#{param3}
	</select>

当然我们也可以给参数指定键,在接口方法的入参前使用@Param注解,给参数指定封装的Map的key,如下:

public List<Emp> selectEmpByEmpNameLike(@Param("empName")String empName,@Param("startSize")Integer startSize,@Param("pageSize")Integer pageSize);

现在注解后可以在SQL映射文件中,使用指定注解的key获得参数的值,那么默认的param1…或者0,1…还能用吗?Param1,param2…可以正常使用,0,1,2…不能使用了。

③:传递的参数是一个实体类对象:会将参数封装成一个Map键值对,键对应的是实体类对象的属性名,值对应的是该实体类属性的值。比如,传递对象为Emp,则封装的Map键值对为:

Keyvalue
empNameempName属性值
empMailempMail属性值
empIdempId属性值
empGenderempGender属性值
deptIddeptId属性值

④:Map作为参数(Map<String,Object>):传入参数为Map的情况下,直接在sql映射文件中使用#{键} 就可以传递相应的值

⑤: List【Set,Array】作为参数(List):一个list参数是很好处理的,集合会被封装成键值对,键为list和collection,值为List集合的值,所以在sql映射文件中想要取得集合的某个位置的具体的值:#{list[索引位置]},#{collection[索引位置]},同理Set集合或者Array数据处理相似。

<!-- 
		public Emp selectEmpByID2(List<Integer> ids); 去主键集合中的第一个元素作为查询条件
	 -->
	 <select id="selectEmpByID2" resultType="com.wanbangee.entities.Emp">
	 	select * from emp where emp_id = #{collection[2]} 或者 #{list[2]}
	 </select>
<!-- 
		public Emp selectEmpByID2(Integer[] ids); 去主键集合中的第一个元素作为查询条件
	 -->
	 <select id="selectEmpByID2" resultType="com.wanbangee.entities.Emp">
	 	select * from emp where emp_id = #{array[2]}
	 </select>

Map,List,和其他参数(Map<String,Object>,List,String empName,Integer pageCurrent,Integer pageSIze):会将参数封装成Map键值对,而且是符合②所述多个参数的封装规则。

<!-- 
		public List<Emp> selectEmpByEmpNameLike(String empName,Integer startSize,Integer pageSize,List<Integer> ids);
	 -->
	<select id="selectEmpByEmpNameLike" resultType="com.wanbangee.entities.Emp">
		select * from emp where emp_name like #{param1} and emp_id = #{param4[2]} limit #{1},#{2}
	</select>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值