существует ли «предварительный перехватчик» mybatis для программного изменения sql перед выполнением sql?

в моем текущем проекте операторы обновления собраны с этими ненулевыми свойствами bean-компонента, мы игнорируем эти нулевые свойства bean-компонента, чтобы предотвратить ошибочное обновление полей до null.

например (не настоящий код, просто помогите понять)

update person 
set
<if test=" address != null and address != '' ">
    address = #{address},
</if>
<if test=" name != null and name != '' ">
    name = #{name},
</if>
where id = #{id}

и если мы установим person.address = '--set-to-null--' и person.name = 'john' и person.id = 1

mybatis сгенерирует sql

update person set address = '--set-to-null--', name = 'john' where id = 1;

мой вопрос в том, как я могу программно изменить sql на

update person set address = null, name = 'john' where id = 1;

прежде чем mybatis выполнит sql

Надеюсь, я ясно изложил вопрос, большое спасибо.


person David Blacksmith    schedule 14.03.2014    source источник


Ответы (1)


Попробуйте привязать:

<bind name="newAddress" value = "address.equals(\"--set-to-null--\") ? org.me.Utils.defaultAddress() : address"/>
update person 
set
<if test=" address != null and address != '' ">
  address = #{newAddress},
</if>
<if test=" name != null and name != '' ">
  name = #{name},
</if>
where id = #{id}
person agad    schedule 14.03.2014
comment
потребуется довольно много биндов - person David Blacksmith; 14.03.2014