Мне нужно вызвать функцию Oracle в MyBatis, используя аннотации.
Мой картограф:
@Select("{ CALL #{outParam, jdbcType=NUMERIC, mode=OUT} := ORA_FUNC( "
+ "#{pNum1, jdbcType=NUMERIC, mode=IN},"
+ "#{pNum2, jdbcType=NUMERIC, mode=IN},"
+ "#{pNum3, jdbcType=NUMERIC, mode=IN} )}")
@Options(statementType = StatementType.CALLABLE)
@ResultType(Integer.class)
public Integer executeFunction(
@Param("map") Map<String, Object> carteira);
и мой призыв к этой подписи:
Map<String, Object> mapParameters = new HashMap<String, Object>();
mapParameters.put("pNum1", carteira.getUnimedCarteira());
mapParameters.put("pNum2", carteira.getCodCarteira());
mapParameters.put("pNum3", carteira.getDigitoCarteira());
mapper.obterRedeBeneficiario(mapParameters);
return mapParameters.get("outParam").toString();
OutParam имеет значение NULL, а возврат mapper также является нулевым.
Может кто-нибудь мне помочь?
создать класс класса SpInOut
class SpInOut{
private String outParam;
private int pNum1;
private int pNum2;
private int pNum3;
//Getters and setters
}
И вы можете изменить своего майнера как ниже
@Select("{ #{outParam, jdbcType=NUMERIC, mode=OUT} = CALL ORA_FUNC( "
+ "#{pNum1, jdbcType=NUMERIC, mode=IN},"
+ "#{pNum2, jdbcType=NUMERIC, mode=IN},"
+ "#{pNum3, jdbcType=NUMERIC, mode=IN} )}")
@Options(statementType = StatementType.CALLABLE)
public void executeFunction(
SpInOut inOut);
@Select("{ CALL #{map.outParam, jdbcType=NUMERIC, mode=OUT} := ORA_FUNC( " + "#{map.pNum1, jdbcType=NUMERIC, mode=IN}," + "#{map.pNum2, jdbcType=NUMERIC, mode=IN}," + "#{map.pNum3, jdbcType=NUMERIC, mode=IN} )}") @Options(statementType = StatementType.CALLABLE) @ResultType(Integer.class) public Integer executeFunction( @Param("map") Map<String, Object> carteira);
Спасибо