Вызовите Java-метод для генерации SQL-запроса в myBatis.

1

Я использую 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
ibatis

2 ответа

1

Основная проблема заключается не в генерации строки запроса: это можно легко сделать с помощью поддержки скриптов, например, с помощью 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, чтобы увидеть, как можно создавать и получать сопоставления параметров.

  • 0
    Проблема с этим решением состоит в том, что мои поля имеют комплексное имя (это не c1, c2. Я использовал эти имена только для упрощения). В методе генерации запроса я получаю поля из класса и генерирую запрос.
  • 0
    Это не проблема. Вы можете формировать пользовательские директивы, чтобы вы могли создавать директивы, которые перебирают поля класса. Я обновил ответ.
1

Я не знаю, как это сделать непосредственно.

Вы можете попробовать создать столбцы при компиляции или развертывании в отдельном файле в виде элементов <sql> а затем при необходимости добавить их в файлы вашего картографа.

Существует также это выражение-строители Реализованы MyBatis что Alows создавать SQL из кода, так, возможно, взглянуть на что также.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню