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

数据库有emp表如下:
MyBatis——使用@Param注解实现多参数入参_第1张图片
假如我想要实现根据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映射,示例如下:



	update emp set ename=#{ename} where eid=#{eid}

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

@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);
	}
	
}

运行结果如下:
MyBatis——使用@Param注解实现多参数入参_第2张图片

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

你可能感兴趣的:(MyBatis)