一个想法:让编写MyBatis(JavaSpring)SQL代码像编写Django/Laravel一样简单?

2024-06-11 23:28:32 发布

您现在位置:Python中文网/ 问答频道 /正文

一句话:(我希望我能)像动态语言(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);
}

哪个IMHO太长了:(

因此,我建议如下:我们只需要写下非常简单的Python(或PHP,待定)代码:

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

而且它将自动生成上面的大MyBatis代码(例如,单击一下python generate.py

上述守则的备注—

  1. 这些.whereBlogId等都是静态类型的(由代码生成器),因此使用PyCharm或Intellij IDEA,您将拥有代码完成的强大功能
  2. 至于代码如何简化—(i)长的<foreach>完全消失了;(ii)我们用语义而不是语法来编写。因此,我们不需要说三件事WHERE id<=start&;{}&;{}。我们只需要说语义page()

当然,这只是一个简单的例子,我只想说明这种方法的潜力(Python/PHP generator+MyBatis):)


问题:我的建议好吗?还是会有一些我没有看到的问题

谢谢你的建议

p.s.我研究过其他解决方案,如JOOQ、MyBatis Plus、MyBatis Generator等,但没有一个具有上述良好特性。。。如果需要,我可以提供更多信息


Tags: 代码id语义pagecomments建议listphp