Мы интенсивно используем iBatis + Spring. Все, что мы получаем из БД, извлекается через хранимые процедуры. Иногда при устранении неполадок мы хотим знать точные параметры, которые были отправлены на SP, и имя SP, которое было выполнено. В настоящее время мы делаем это путем отладки кода (что является проблемой). Мы хотели бы добавить какое-то ведение журнала в iBatis, чтобы он распечатывал имя SP + значения параметров. Мы используем log4j, и ниже приведена наша структура iBatis.
Отображение:
<procedure id="getReportData" parameterMap="getReportDataCall">
{call get_rpt (?,?,?,?)}
</procedure>
<parameterMap id="getReportDataCall" class="map">
<parameter property="type" jdbcType="String" javaType="java.lang.String" mode="IN"/>
<parameter property="month" jdbcType="Int" javaType="java.lang.Integer" mode="IN"/>
<parameter property="Result0" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap="result1"/>
<parameter property="Result1" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap="result2"/>
</parameterMap>
<resultMap id="select-first-result-hq" class="VO">
<result property="column1" column="columna"/>
<result property="column2" column="columnb"/>
</resultMap
Вызов iBatis из DAO
HashMap parm = new HashMap ();
parm.put("type", type_val);
parm.put("month", month_val);
getSqlMapClientTemplate().queryForList("mymappingName.getReportData", parm);
Как видите, параметры находятся только в файле HashMap
. Я мог бы создать собственный класс + метод, который принимает HashMap
и имя процедуры в качестве параметров и просто выводит все пары ключ/значение хэш-карты и имя процедуры в журнал. Однако, если я сделаю это... Мне придется добавить этот вызов ко всем моим DAO, прежде чем я вызову SP.
Есть ли более простое решение для этого? чтобы я снова не касался всего своего кода?