Идея: сделать написание MyBatis (Java Spring) SQL код так же просто, как написание Django / Laravel? - PullRequest
0 голосов
/ 24 апреля 2020

В одну строку: (надеюсь, что смогу) Пишите код, например язык Dynami c (Laravel / Django), и наслаждайтесь производительностью Java.

Мы знаем, что очень многословно записывать коды MyBatis ... Например, в качестве игрушечного примера, следующий код MyBatis:

public interface CommentDao {
    @Select(
      "SELECT * FROM comments"+
      "<foreach collection='blogIds' item='id' open='(' separator=',' 
close=')'>"+
        "#{id}"+
      "</foreach>"+
      "AND id <= #{pageStart}"+
      "ORDER BY id DESC"+
      "LIMIT #{pageLimit}"
    )
    List<Comment> getComments(List<Integer> blogIds, long pageStart, int pageLimit);
}

Какой ИМХО слишком долгооооооооооооооооооооооооооооооооооооо : (

Поэтому я предлагаю следующее: нам нужно только записать очень простой Python (или PHP, будет определен) код:

def getComments(blogIds, pageStart, pageLimit):
    comments.select()
        .whereBlogId(blogIds)
        .page(pageStart, pageLimit)

и автоматически сгенерирует большой код MyBatis, указанный выше (например, одним щелчком python generate.py)!

Примечание к указанному выше коду -

  1. Эти .whereBlogId, et c, все статически типизированы (генератором кода), поэтому, используя PyCharm или Intellij IDEA, вы получите мощное завершение кода.
  2. Что касается упрощения кода - (i) long <foreach> полностью ушел; (ii) Мы пишем семантикой вместо синтаксиса . Таким образом, нам не нужно говорить t три вещи WHERE id<=start & ORDER BY id & LIMIT limit. Нам нужно только сказать семантику page().

Конечно, это всего лишь простой пример. Я просто хочу проиллюстрировать потенциал этого подхода (Python / PHP generator + MyBatis):)


Вопрос : Хорошо ли мое предложение? Или будут проблемы, которых я не видел?

Спасибо за любые предложения!

ps Я исследовал другие решения, такие как JOOQ, MyBatis Plus, MyBatis Generator и др. * 1059. *. Но ИМХО ни один из них не обладает хорошими свойствами выше ... При необходимости я могу предоставить больше об этом

...