MyBatis——使用@Param注解实现多参数入参

数据库有emp表如下:
在这里插入图片描述
假如我想要实现根据eid修改ename的操作。对于此需求,也是修改操作,但是可以明确方法的传入参数只有2个:职员id和新名字。若按照以前的封装成Emp对象的方式进行传参,并不是很合适,可以用更灵活的方式处理:直接进行多参数入参即可,代码可读性高,可以清晰的看到这个方法所需的参数是什么。

当方法参数有多个时,每个参数前都需要增加@Param注解:

public int updateEname(@Param("eid")int id,@Param("ename")String name);

使用注解@Param来传入多个参数,如@Param(“eid”)int id,相当于将该参数id重命名为eid,在映射的SQL中需要 #{注解名称} , 如 #{eid}。

修改EmpMapper.xml,增加id为updateEname的SQL映射,示例如下:

<!-- 根据职员id修改职员名称 -->
<update id="updateEname">
	update emp set ename=#{ename} where eid=#{eid}
</update>

最后修改测试类,进行职员名称的修改测试,示例如下:

@org.junit.Test
public void testUpdateEname() {
	SqlSession session =null;
	try {
		session= MyBatisUtils.getSqlSession();
		EmpDao ed = session.getMapper(EmpDao.class);
		int i = ed.updateEname(45,"竹子");
		System.out.println(i>0?"修改成功":"修改失败");
		//手动提交事务
		session.commit();
	} catch (Exception e) {
		e.printStackTrace();
	}finally {
		MyBatisUtils.closeSqlSession(session);
	}
	
}

运行结果如下:
在这里插入图片描述

若不使用@Param注解,则会报错,报错信息如下:
在这里插入图片描述
探究原因,需要深入MyBatis源码,MyBatis的参数类型为Map,若使用@Param注解参数,那么就会记录指定的参数为key;若参数前没有加@Param,那么就会使用“param”+它的序号作为Map的key。 故在进行多参数入参时,若没有使用@Param指定参数,那么在映射的SQL语句中获取不到#{参数名},从而报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值