Как вызвать хранимую функцию PL\SQL через MyBatis?

Написано 29 Ноябрь, 2012 в категории Java

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!