Как использовать динамический SQL-запрос в MyBatis с аннотацией (как использовать selectProvider)? - PullRequest
16 голосов
/ 14 июля 2011

Я стараюсь не использовать дополнительный xml для определения картографа в mybatis3.Аннотация подходит.

Я немного смущен использованием @ SelectProvider / @ InsertProvider / и т.д.Не думайте, что в Интернете есть много ресурсов, помогающих мне в этом.

По сути, я хотел бы найти аннотационную версию альтернативы для в mybatis3.

Например, у меня есть xml mapperи я хочу преобразовать его в аннотацию

<select ...>
  <where>
    <if cause.....>
    </if>
    <if cause......>
    </if>
  </where>
</select>

Может ли кто-нибудь предоставить конкретный ответ / решение, включая код?

Заранее спасибо!

Ответы [ 2 ]

21 голосов
/ 16 апреля 2013

Альтернативное решение для вас может быть:

Добавьте <script> в начале вашей @ аннотации

@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, как указано выше

7 голосов
/ 07 декабря 2012
  1. в вашем интерфейсе картографа:

    @SelectProvider(type=MyClass.class, method="myMethod")
    public Object selectById(int id);
    
  2. в MyClass:

    public static String myMethod() {
        return "select * from MyTable where id=#{id}"; 
    }
    
...