Я использую myBatis для написания некоторых SQL-запросов, проблема в том, что у меня есть таблицы с несколькими столбцами (около 50 столбцов). Итак, insert
запрос на insert
следующим образом:
<insert id="insert" parameterType="com.atos.tables.Table1>
insert into ot ( id, c1, c2, ....,c50) values (#{id}, #{c1},#{c2},... #{c50})
</insert>
очень утомительно.
Я могу создать метод в java, который генерирует String
запросов автоматически, но как я могу вызвать этот метод из mapper.xml
?
И если я использую аннотации myBatis, я не могу вызвать метод в интерфейсе. Я не знаю, не хватает ли чего-то, есть ли способ сделать это?
Спасибо за помощь.
Основная проблема заключается не в генерации строки запроса: это можно легко сделать с помощью поддержки скриптов, например, с помощью mybatis-velocity.
Основная проблема заключается в том, чтобы динамически устанавливать параметры. Это можно сделать с помощью mybatis-velocity, определяя настраиваемую директиву, которая будет динамически создавать org.apache.ibatis.mapping.ParameterMapping
.
Он может использоваться в mapper следующим образом:
<insert id="insert">
insert into ot (
#field_names('com.atos.tables.Table1')
) values ( @{id},
#params_for_fields('com.atos.tables.Table1')
)
</insert>
Здесь #field_names
#params_for_fields - это настраиваемые директивы, которые необходимо реализовать. field_names
следует перебирать поля класса, которые передаются в качестве аргумента и генерируют список полей, разделенных запятыми.
params_for_fields
должны создавать новое сопоставление параметров и добавлять их в список сопоставлений параметров, поддерживаемых драйвером языка скорости.
Вы можете посмотреть встроенную директиву repeat и ParameterMappingCollector, чтобы увидеть, как можно создавать и получать сопоставления параметров.
Я не знаю, как это сделать непосредственно.
Вы можете попробовать создать столбцы при компиляции или развертывании в отдельном файле в виде элементов <sql>
а затем при необходимости добавить их в файлы вашего картографа.
Существует также это выражение-строители Реализованы MyBatis что Alows создавать SQL из кода, так, возможно, взглянуть на что также.