本文概览:介绍了@param的引入的目的和应用举例。

1 由一个问题引入

1.1 问题描述

当在Dao对象中定义了如下接口

对应的mapper.xml的设置如下

上述没有任何问题,但是当在DAO中加入这个@Param时,如DAO

此时就会报错

Error rg.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘version’ not found. Available parameters are param1, hourRoomEntity

1.2 问题分析

1. 当使用@Param时,就会将@Parm的所有参数装到一个map中,必须写成如下格式

所以,对于使用@Param修饰一个对象类型,需要使用如下格式

2. 当不使用@Param时,就当成一个对象来处理,只需要写成

1.3 举例【单个参数时建议不写@Param】

1. 对于dao中定义如下两个函数:有@Parm和无@Param两种情况:

2. 对应mapper.xml

(1)有@Param

(2)无@Param

2 @Param解析

2.1 引入目的

引入的目的就是为了在Dao接口中支持多个参数。

2.2 举例

1. 问题描述

当接口中的参数有多个时,如

此时应该写为

2. 分析如下:

如下内容主要意思就是可以通过@Param来实现多参数,这正是@Param的引入的意义

You can pass multiple parameters to a mapper method. If you do, they will be named by their position in the parameter list by default, for example: #{1}, #{2} etc. If you wish to change the name of the parameters (multiple only), then you can use the @Param(“paramName”) annotation on the parameter.

3. 实例如下

对应的mapper

 

3 @Param和parameterType关系

二者的关系如下

  • 如果使用了@Param,就不需要在mapper.xml中设置parameterType属性了
  • 如果不使用@Param,就需要在mapper.xml中设置parameterType属性了。

所以进行如下总结

  • 如果在dao接口代码中,函数中参数只有一个,那么此时就在mapper.xml中使用parameterType,不使用@param了;
  • 如果在dao接口中代码中,函数中参数有多个参数时,此时就使用@param,在mapper.xml中不再需要parameterType了。

(全文完)

分类&标签