Итак, я работаю над проектом (JSF2, Spring3 Core, MVC, Webflow, MyBatis3, RichFaces и устаревшая версия Oracle 10g). Источник всех моих проблем связан с дизайном базы данных. Проблема в том, что большинство таблиц БД имеют изменяющуюся схему (возможно, плохой дизайн?). Поэтому я должен иметь возможность поддерживать добавление и удаление дополнительных столбцов.
Для этого я сделал MyBatis извлекающим данные в пользовательский «универсальный» объект домена, который в основном просто расширяет хэш-карту. Моя текущая проблема обновляет эти объекты hashmap. Должен быть способ заставить это работать, но я могу заставить MyBatis сотрудничать. Я пытался использовать HashMap.entrySet () и MyBatis, но безрезультатно. например.
UPDATE MYTABLE
SET
<foreach collection="entries" index="i" item="entry" close="" open="" separator=", ">
#{entry.key} = #{entry.value}
</foreach>
WHERE FOO='BAR';
Я попробовал пользовательский TypeHandler, но setParameter () не дает мне достаточно доступа, чтобы делать то, что мне нужно. ResultHandler не дал мне достаточного доступа к каждому отдельному результату, поэтому я тоже не мог его использовать.
Теперь я знаю, что мог бы сделать что-то вроде Obj.createUpdateSqlString () и вставить его в маппер в виде литеральной строки, но это немного взломало и оставило меня открытым для инъекции SQL. Не говоря уже о том, что это потребует избежания множества строк и учета широкого диапазона возможных входных данных, и, если не будут рассмотрены все возможности, это откроет дверь для некоторых серьезных ошибок.
Так есть ли установленный способ сделать это? Или хотя бы на полпути приличного пути? Я слышал, как многие сторонники MyBatis говорят, что им еще предстоит столкнуться с ситуацией, с которой MyBatis не может справиться изящно; поэтому эксперты MyBatis, пожалуйста, помогите мне !!