Вызов функции оракула с MyBatis (на основе аннотаций)

1

Мне нужно вызвать функцию 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 также является нулевым.

Может кто-нибудь мне помочь?

  • 0
    вы можете сослаться на stackoverflow.com/questions/26739636/… добавил полный пример
  • 0
    Karthik, этот пример для XML на основе, я пытаюсь подобный в аннотации на основе бит не работает
Показать ещё 2 комментария
Теги:
mybatis
mybatis-generator
ibatis

1 ответ

2
Лучший ответ

создать класс класса 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);
  • 0
    Спасибо @ karthik-prasad, его работа. Я пытаюсь использовать HashMap и тоже работает: @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); Спасибо
  • 0
    Как вы будете поступать так же в случае вызова процедуры с курсором как OUT param? Я устал от этого, но не работал: `@Select (" {call MV_METADATA.MV_GET_UI_REPORTS_BY_PAGEC (139,00572, 'MVP', '%', + "'DESC', \ n" + "'01 -01-1900 ', \ n "+" '01 -01-3000 ', \ n "+"' All ', \ n "+"' 9202,9201,129,1007 ', \ n "+" # {res, jdbcType = OTHER, mode = OUT})} ") @Options (StatementType = StatementType.CALLABLE) @ResultType (LookUpParams.class) void getData (LookUpParams lookUpParams);`

Ещё вопросы

Сообщество Overcoder
Наверх
Меню