使用Mybatis-Plus调用pgsql存储过程两种方法
1.使用@Select注解
使用方法:在dao层接口上加@Select注解,括号写 select +调存储过程名。
语法:
select 存储过程名( #{column1}, #{column2} …)
注意:
1.有入参时,@Selec注解中的参数名要和接口@Param注解里的参数名一致。
2.如果要调的存储过程没有入参就不用传参数
例:
@Select("select funName(#{column1},#{column2}...)")
Object funName(@Param("column1") String column1,@Param("column2") Integer column2...);
注意:
1).@Select注解里的参数顺序和接口里的参数顺序要保持一致。
2).使用@Select注解的方式有局限性,当需要给存储过程传入数组时,使用注解的方式会报错,原因是mybatis默认提供的类型转换器会失效,这时需要自定义一个类型转换器,并使用call关键字调用存储过程,call方法支持传递数组。
2.使用call关键字
使用场景1:只传递常规参数(如:Integer,String,Double…)
1.定义dao层接口,就像你平时做的一样,只不过参数需要放入map中
void funName(Map<String,Object> paramsMap);
2.编写mapper,其中“mode=IN”语句是固定的,表示参数是输入参数。
<select id="funName" parameterType="java.util.HashMap" statementType="CALLABLE">
{ call funName(#{column1,mode=IN},#{column2,mode=IN}...) }
</select >
使用场景2:入参中有数组
使用call关键字调用存储过程并传递数组时,需要先自定义一个类作为类型处理器,实现 org.apache.ibatis.type.TypeHandler 接口, 或继承org.apache.ibatis.type.BaseTypeHandler, 再将该类指定到call中,就可以将数组映射到一个 JDBC 类型。
1.自定义ArrayTypeHandler类型处理器,继承TypeHandler接口:
代码:
import org.apache.ibatis.type.BaseType