如何使用 mybatis 到 return a table 或 setof 从过程调用与 postgresql?

How to use mybatis to return a table or setof from procedure call with postgresql?

我如何解决它使用 mybatis 到 return a table 或 setof 从 postgresql 的过程调用。谢谢 psotgreaql:

CREATE OR REPLACE FUNCTION public.p_find_battery_detail(
item character varying, 
vaulestr character varying, 
islimit boolean)
 RETURNS TABLE(
id bigint, 
no character varying, 
chassis character varying, 
channel character varying, 
module character varying, 
isformat bit, 
isgrad bit, 
ismatch bit, 
ismastop bit, 
sfile json, 
sftimesign character varying, 
groupclass character varying, 
gradtimesign character varying, 
gradf json)
 LANGUAGE plpgsql

java 中的 mybatis 带有注解

@Select("call p_find_battery_detail(#{0}, #{1}, #{2})")
@Options(statementType = StatementType.CALLABLE)
List<BatteryInfoDetail> findBatteryDetail(String itemStr, String valueStr, boolean isLimit);

当我运行这个搜索时,会抛出一些错误:

org.apache.ibatis.binding.BindingException: Parameter '0' not found. Available parameters are [arg2, arg1, arg0, param3, param1, param2]
and so on....

最短的前进方式是应用错误消息提供的提示:

@Select("call p_find_battery_detail(#{arg0}, #{arg1}, #{arg2})")

为了更进一步,您可以通过注释命名参数以在查询中重用此名称:

@Select("call p_find_battery_detail(#{itemStr}, #{valueStr}, #{isLimit})")
@Options(statementType = StatementType.CALLABLE)
List<BatteryInfoDetail> findBatteryDetail(@Param("itemStr") String itemStr, Param("valueStr") String valueStr, Param("isLimit") boolean isLimit);

params 可以有任何你想要的名字。

@Select("select * from  p_find_battery_detail(#{itemStr}, #{valueStr}, #{isLimit})")
List<BatteryDetail> findAll(@Param("itemStr") String itemStr, @Param("valueStr") String valueStr, @Param("isLimit") boolean isLimit);