在使用mybatis开发时,会定义很多的mapper接口,其中的方法如果是一个通用方法,可以继承Mybatis Plus中的BaseMapper接口,然后通过SQL注入的方式实现该方法的功能,这样后续其他需要该功能的代码也可以直接调用了;如果是专用的方法,可以通过xml配置具体的sql,对于存在参数的接口方法,通常我们会使用@Param对参数进行注解,本质上相当于对传入参数进行重新命名,方便在xml中使用。
接下来主要看一下@Param注解。主要分为以下三种情况
1. 只有一个参数时
2. 有多个参数时
3. 特殊类型
一个参数
- 当想要对参数进行重命名时,需要加@Prama
- 当传入的参数使用$符引用时,需要@Param,例如传入的是一个sql语句或者是一个table_name或者column_name等
- 当xml的sql使用动态sql时,需要加@Param,即在if、when标签中使用了该参数的判断
多个参数
一般传入多个参数必须使用@Param注解,否则会报错
如果想要配置这块,需要配置编译参数 -parameters,如果不想在所有缺少的方法上添加注解,可以在maven-compiler-plugin的configuration上添加<parameters>true</parameters>
注意 :当参数过多时,可以将其组装为一个Map传入,这样也不用使用@Param注解了,里面参数调用直接使用#{key,jdbcType=…}
特殊参数
这里主要是两个参数,分别是Page类型和Wrapper类型的参数。返回分页数据,其返回值一般设置为IPage<T>
,其中必须要传入的参数也必须包含IPage<T>
,一般设置其为@Param("page")
。如果参数中包含Wrapper类型,一般设置为@Param(Constants.WRAPPER) Wrapper<T> wrapper
,Constants.WRAPPER值为ew。
IPage<T> functionName(@Param("page") IPage<T> page,@Param(Constants.WRAPPER) Wrapper<R> wrapper,M...m)
在其xml配置文件中,如果需要用到wrapper的数据
<!-- 如果想要直接用wrapper的select语句可以做ew.SqlSelect不为NULL和空的判断 -->
<!-- 如果自己的sql中没有where语句,直接用wrapper的,可以使用${ew.customSqlSegment} -->
<select id="functionName" resultType="java Object">
select * from tb_name where ...
<if test="ew.nonEmptyOfWhere">
and
${ew.sqlSegment}
</if>
</select>