Я получил то же самое [null, null], пытаясь обработать некоторый динамически сгенерированный sql.В руководстве mybatis упоминается SqlBuilder, но не предлагается, как использовать sql.Я думаю, что ваша проблема может быть решена путем добавления аннотаций @Results и @Result.Это должно работать, если столбцы результатов всегда одинаковы, см., Например, в конце @ Пример результатов
В моем случае я не буду знать, какие столбцы есть, вот чтоВ конце концов я это сделал.
В моем xml-файле mapper:
<update id="executeUpdate">
${stmt}
</update>
<select id="executeQuery" resultType="java.util.Map">
${stmt}
</select>
$ {} вместо # {} вставит строку как есть и не будет обрабатывать ее как jdbc?параметр.Это ключ к этому решению.В вашем случае это будет sql, возвращаемый @SelectProvider, и вы добавите @Param ("stmt") для передачи фактического sql для запуска.
В интерфейсе mybatis, соответствующем xml-файлу:
void executeUpdate(DynamicSqlDao.ParameterObject po);
List<Map<String,Object>> executeQuery(DynamicSqlDao.ParameterObject po);
ParameterObject - это простой компонент:
@Data
public class ParameterObject
{
String stmt;
Map<String,Object> param;
}
(@ Данные из Project Lombok и генерирует геттер / установщики)
IТеперь я могу назвать мой интерфейс "dao" следующим образом:
Map<String,Object> pmap = new HashMap<String,Object>();
pmap.put("apa", "banan");
ParameterObject po = new ParameterObject();
po.stmt = stmt;
po.param = pmap;
List<Map<String,Object>> result = dao.executeQuery(po);
ParameterObject мог быть просто картой с зарезервированным именем для оператора sql.Теперь, когда я опубликовал это, может кто-нибудь еще, пожалуйста, опубликуйте более элегантное решение ...:)