
-
嗨,迈克尔。你想介绍一下自己,并告诉我们一些你的开发经验吗?
我叫迈克尔·西蒙斯,Twitter上的 @rotnroll666。
除了“枯燥”的商业应用程序外,我还长期从事博客写作,并运营了几个在线社区,其中一个至今仍在运营。Daily Fratze 是一个始于2005年的每日照片项目,最初是一个PHP应用程序。然后,在2006年变成了一个Ruby on Rails网站,到2010年,我开始将其迁移到Spring和Hibernate后端。
回顾那时的代码,我注意到自己对JPA / Hibernate的目的和意图了解得多么有限。正如许多事情一样,你必须了解你的工具以及它们的设计目的。并非所有关系都旨在在对象中实现,并非所有查询都可以生成。了解何时刷新
Session
以及何时不刷新是至关重要的。仅仅了解SQL并不能充分利用Hibernate,但仅仅了解Hibernate也无法抽象持久化。我修改了网站代码中的缺陷,但作为本访谈的读者,你不必通过艰难的方式去学习它,我强烈推荐Vlad Mihalcea的书籍《高性能Java持久化》。我的骑行项目以及Euregio JUG的网站和API是我最新的公开项目,代表了上述经验中学到的东西。我将这些项目作为我工作的参考项目。
多年来,我主要使用NetBeans进行所有类型的软件开发。它支持我使用纯Java、Spring,对于JPA实体(内置查询、编码风格检查)以及前端(包括HTML和JavaScript)都非常好。最重要的是,它对代码质量相关工具(如JaCoCo、Sonar等)具有出色的集成。
-
您设计了Java用户组Euregio Maas-Rhine的网站。您能告诉我们您使用了哪些框架吗?
对于Euregio JUG(源代码在GitHub上),我选择了以下内容
-
Spring Boot 作为应用程序容器和粘合剂
-
Spring Framework 和 MVC
-
JPA 及其实现Hibernate
-
Spring Data JPA
-
-
前端通过使用Thymeleaf进行服务器端渲染的模板完成,这相当传统。
一般来说,当使用任何类型的SQL数据存储时,我会选择以下堆栈
-
只要我可以将我的领域模型表达为实体和表,就会使用JPA / Hibernate 与 Spring Data JPA
-
如有必要,使用JPQL查询,其优点是在应用程序启动时进行检查
-
不要将原始查询隐藏在某些注解中
-
如果必须执行原始查询,我会选择Spring的JDBC模板或自2015年以来适用的jOOQ。
-
我切换到原始查询的规则是,当我需要进行投影或“硬”分析,而这些分析将需要大量Java代码而不是几行SQL时。
-
-
您为什么选择Hibernate ORM和搜索而不是其他框架,它是否符合您的期望?
从我的背景来看,数据模型始终至关重要。我使用过优秀的模型和不太好的模型。如果你可以将你的领域映射到数据模型,拥有一个工作的领域驱动设计,Hibernate可以帮助你将它们再次实体化到Java中。
我们想在网站上发布文章(帖子)和活动。人们应该能够注册这些活动,每人一次。这完美地融入了一个简单且易于理解的领域模型,该模型与对象和实体完美对应。
为什么还要费心自己编写那些用于选择和更新数据的普通SQL语句呢?
我选择Hibernate和Spring Data JPA的组合是有原因的:我在Hibernate中映射的领域支持Spring Data JPA所做的一切“魔法”:生成查询、条件等:我几乎不用自己写什么。
如果你在项目中选择了JPA / Hibernate ORM,我强烈建议添加Spring Data JPA。即使是Java EE项目。在那里Spring Data JPA的配置稍微困难一些,但为用户提供了很多有用的功能。
使用Hibernate Search集成是一个实验。我已经在我的日常照片项目中使用它很长时间了。只需付出一点努力,我的实体就可以提供对基于Lucene的索引的访问,而且我不用与SOLR斗争。
EuregJUG网站没有本地存储,与我日常照片项目不同。因此,我不得不在5.6.0版本中测试即将推出的Elastic Search集成,它使用相同的一组注解、相同的实体,但不是针对本地索引,而是针对远程Elastic search索引。你可以在这里看到的提交中看到它,并可以在这里使用它。
增加的内容并不多,它符合仓库/领域驱动设计方法,符合我的预期。
关于Spring Boot,我已经使用Spring超过7年,Boot从2014年初开始。它有一个很棒的社区,实际上从未让我失望。
-
我们一直重视用户的反馈,所以你能告诉我们你希望我们改进什么,或者有哪些功能我们应该提供支持吗?
作为Hibernate用户,我在这段时间内遇到的最常见的问题是我不知道自己在做什么:在映射我的表时遇到问题,查询速度慢等。此外,将Hibernate应用于更适合纯SQL的问题也导致问题。在这两种情况下,这些问题都可以在我的端解决。
最近Hibernates的bug追踪器的体验有了很大的改善,我希望能有更好的Spring Data JPA集成。
总之,我必须说我非常喜欢上述堆栈。我们已经达到了一个质量,可以从领域驱动设计的角度真正有效地工作,如果需要,切换到SQL,同时仍然拥有干净、可测试的代码的清晰架构。10年前存在的问题大多数已经消失了。
要启动一个应用程序并包括单元和集成测试并不困难。如果你抛开那些炒作,你就可以专注于实际问题和使人们能够学习和工作。
我非常喜欢Hibernate Spatial能够进入ORM本身。如果你正确映射了实体,并且需要通过空间区域查询它们,这些功能真的很有用,并且工作得相当好。我希望能有更多相关信息。
感谢你,Michael,感谢你抽出时间。在这里有你真是太荣幸了。要联系Michael,你可以关注他的Twitter。