как сделать вход в iBatis ORM

Мы интенсивно используем 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.

Есть ли более простое решение для этого? чтобы я снова не касался всего своего кода?


person Omnipresent    schedule 06.03.2010    source источник


Ответы (1)


Я также довольно широко использовал iBatis и Spring и, как правило, просто повышал уровень ведения журнала до DEBUG для классов java.sql.*. Обычно я делаю что-то подобное в log4j.properties:

log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

Это регистрирует как sql, так и значения, которые передаются заполнителям параметров.

person digitalsanctum    schedule 07.03.2010
comment
Операторы отладки уже существуют в классах java.sql.*. Вам просто нужно настроить Log4J или что-то еще, что вы используете для ведения журнала, чтобы использовать DEBUG для этих классов. - person digitalsanctum; 09.03.2010