@Param注解的用法

1、使用@Param注解的原因

在 Mapper接口中,当方法的参数为多个字面量类型,此时mybatis会将这些参数存储在一个Map集合中,以两种方式进行存储

  • 1、以arg0.arg1…为键,以参数为值
  • 2、以param1,param2…为键,以参数为值

例如:根据两个参数ename和job,查询emp的信息。

  • 1、接口方法的习惯写法
Emp finEmpByEnameAndJob(String ename, String job);
  • 2、SQL的习惯写法
<select id="finEmpByEnameAndJob" resultType="Emp">
     select * 
     from emp 
     where ename = #{ename} and job = #{job};
</select>
  • 3、执行查询操作

@Param注解的用法_第1张图片

  • 4、出现查询异常
### Cause: org.apache.ibatis.binding.BindingException: 
Parameter 'ename' not found. 
Available parameters are [arg1, arg0, param1, param2]

2、@Param注解的用法

2.1、@Param注解普通类型的参数

Mapper中的方法:

Emp finEmpByEnameAndJob(@Param("ename") String ename, @Param("job") String job);

映射到xml中的标签

<select id="finEmpByEnameAndJob" resultType="Emp">
        select *
        from emp
        where ename = #{ename}
          and job = #{job};
select>

注意点:
其中where ename = #{ename} and job = #{job}中的ename和job都是从注解@Param() 里面取出来的,取出来的值就是方法中形式参数 int ename 和 String job的值。

2.2、@Param注解JavaBean对象

SQL语句通过@Param注解中的别名把对象中的属性取出来然后赋值

Mapper接口中的方法:

int addEmp(@Param("emp") Emp emp);

映射到xml中的标签

<insert id="addEmp">
        insert into emp
        values (#{emp.empno}, #{emp.ename}, 
        			 #{emp.job}, #{emp.mgr}, 
        			 #{emp.hiredate}, #{emp.sal},
        			 #{emp.commit},#{emp.deptno});
insert>

注意点:
在SQL语句中,通过使用@Param(“emp”)注解中的别名emp,对象emp中的属性取出来然后给SQL语句中的字段赋值。

3、注意事项

  • 1、当使用了@Param注解来声明参数的时候,SQL语句取值使用#{ },${ }取值都可以。
  • 2、当不使用@Param注解声明参数的时候,必须使用的是#{}来取参数。使用${}方式取值会报错。
  • 3、不使用@Param注解时,参数只能有一个,并且是Javabean。在SQL语句里可以引用JavaBean的属性,而且只能引用JavaBean的属性。

你可能感兴趣的:(我开发中的遇到的问题点,mybatis,java)