Как использовать динамический SQL-запрос в MyBatis с аннотацией (как использовать selectProvider)?
Я пытаюсь избежать наличия дополнительного xml для определения mapper в mybatis3. Аннотации соответствуют требованиям.
Я немного смущен использованием @SelectProvider/@InsertProvider/etc. Не думайте, что в Интернете есть много ресурсов, которые помогают мне в этом.
В принципе, мне захочется найти альтернативную версию аннотации для mybatis3.
Например, у меня есть xml mapper, и я хочу преобразовать его в использование аннотации
<select ...>
<where>
<if cause.....>
</if>
<if cause......>
</if>
</where>
</select>
Может ли кто-нибудь предоставить конкретный ответ/решение, включая код?
Спасибо заранее!
Ответы
Ответ 1
Альтернативным решением для вас может быть:
Добавьте <script>
в начало вашей @annotation
@Update("<script>
update Author
<set>
<if test="username != null">username=#{username},</if>
<if test="password != null">password=#{password},</if>
<if test="email != null">email=#{email},</if>
<if test="bio != null">bio=#{bio}</if>
</set>
where id=#{id}
</script>")
В дополнение, мы компилируем .groovy в .class в наших проектах, таким образом, мы можем написать SQL в @annotation, как указано выше
Ответ 2
-
в вашем интерфейсе карты:
@SelectProvider(type=MyClass.class, method="myMethod")
public Object selectById(int id);
-
в MyClass:
public static String myMethod() {
return "select * from MyTable where id=#{id}";
}