има ли "предварителен прихващач" на 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