Как вызвать хранимую функцию PL\SQL через MyBatis?
MyBatis достаточно простой в изучении SQL to Java mapper. К сожалению, документации по нему очень и очень немного (даже англоязычной, не говоря уже о русскоязычных руководствах). Поэтому информация в основном черпается из блогов. Хочу продолжить эту тенденцию.
У меня возникла задача вызова хранимой функции (stored function) через MyBatis. В сети достаточно примеров по работе через XML, но в моем случае это было простое приложение и создавать xml файл с кучей букв очень не хотелось. MyBatis позволяет конфигурировать запросы к базе, а также вызывать хранимые процедуры и функции через Аннотации (wiki). Т.е. мы можем описать запрос и возвращаемые результаты непосредственно в коде. Об использовании аннотаций в MyBatis написано очень мало, поэтому привожу пример вызова хранимой процедуры и хранимой функции:
Хранимая процедура PL\SQL:
@Select(value="{call my_procedure(" + "#{inParams, mode=IN, jdbcType=VARCHAR}," + "#{outParams, mode=OUT, jdbcType=VARCHAR}," + "#{id, mode=IN, jdbcType=INTEGER})}" ) @Options(statementType = StatementType.CALLABLE) public void getResultProc(ResultProc resultProc);
Хранимая функция PL\SQL:
@Select(value="{#{result, mode=IN, jdbcType=INTEGER} = call my_package.my_function(" + "#{id, mode=IN, jdbcType=INTEGER}," + "#{inParams, mode=IN, jdbcType=VARCHAR}," + "#{outParams, mode=OUT, jdbcType=VARCHAR}," + "#{isRaiseCatch, mode=IN, jdbcType=INTEGER})}" ) @Options(statementType = StatementType.CALLABLE) public void getResultFunc(ResultFunc resultFunc);
Главное не запутаться с открывающими и закрывающими скобками.
Удачи в освоении MyBatis!