我知道我可以使用EbeanEbeanServer访问数据库。 EbeanServer比Ebean具有更多的API方法。Ebean上的许多方法(例如Ebean.find(Class)等)实际上只是在“默认/主” EbeanServer上调用方法的便捷方法。

我的问题:


我可以通过调用Ebean.getServer(String name)来使用EbeanServer提供的所有API来获取EbeanServer对象吗?
在哪种情况下应该在EbeanServer上使用Ebean(反之亦然)?
EbeanServer是否适合以编程方式创建EbeanServer?
Ebean是否适合通过配置文件创建EbeanServer?


在Play 2.4中,不需要ebean.properties,可以在application.conf中放入ebean配置,我想我应该在Playframwork 2.4中使用Ebean,对吗?

谢谢你的建议。

EbeanServer api doc

Ebean api doc

最佳答案

首先,一种查看方式是Ebean拥有EbeanServer实例的寄存器/映射,并且这些实例之一可以定义为默认服务器。

但是,不需要使用Ebean或注册EbeanServer实例。也就是说,可以创建EbeanServer实例并且不向Ebean注册EbeanServer实例,这样您就不需要/不需要/不需要Ebean(更纯的DI风格)。

换句话说-EbeanServer是真实/实际的实现,您必须拥有一个EbeanServer实例。您可以选择向Ebean注册一个EbeanServer实例(大多数人都这样做),如果您确实注册了EbeanServer实例,那么该实例将可供Ebean单例使用,并且Ebean上的方法是快捷方式。

您可以同时使用这两种方法,这在依赖项注入方案中是合理的(请参阅http://ebean-orm.github.io/docs/setup/guice)。因此,您可以使用Guice提供者或Spring工厂bean创建EbeanServer实例,并使用Ebean单例注册该实例。这样,您既可以使用DI(Guice / Spring)@Inject EbeanServer实例,也可以通过Ebean.getDefaultServer()同时获得完全相同的EbeanServer实例(并且还可以使用Model / Finder / Ebean ala活动记录) 。

所以关于您的问题:

问:EbeanServer是否适合以编程方式创建EbeanServer?

EbeanServerFactory用于创建EbeanServer实例。请参阅http://ebean-orm.github.io/docs/setup/serverconfig

问:是否可以通过调用Ebean.getServer(String name)来使用EbeanServer提供的所有API来获取EbeanServer对象?

是,假设已注册EbeanServer实例(这是可选的)。请参考ServerConfig.setRegister(boolean)和ServerConfig.setDefaultServer(boolean)。

问:在哪种情况下应该在EbeanServer上使用Ebean(反之亦然)?

从技术上讲,在所有情况下,您都在使用EbeanServer实例,因此,实际上这是一个样式问题。当实例注册为默认服务器等时,您可以选择通过Ebean单例访问EbeanServer实例。

以我所谓的“传统依赖注入”风格,您根本不会使用Ebean。使用Guice / Spring等将EbeanServer实例注入到您的服务中。

在我所谓的“活动记录”样式中,您喜欢使用Model / Finders / Ebean产生的简单性和相对简洁的代码。我在http://ebean-orm.github.io/docs/setup/activerecord讨论这种风格

总之,在使用Ebean还是EbeanServer之间进行选择是一个样式问题。我将它们描述为“传统DI”和“活动记录”样式。

现在,我还需要指出,在DI情况下,您可以根据需要使用两种样式。您既可以@Inject EbeanServer实例,也可以通过Ebean访问它,以启用Model / Finder和活动记录样式的使用。在DI情况下,这是合理的,在这种情况下,您需要以编程方式配置EbeanServer实例,但仍希望能够通过Model和Finders使用活动记录样式。

测试:

测试也涉及到这一点。 avaje-ebeanorm-mocker项目专门提供了通过Ebean / Model / Finder使用时模拟EbeanServer实例的机制,因此在使用avaje-ebeanorm-mocker时,它具有与传统注入相同的可测试性EbeanServer。

问:Ebean是否适合通过配置文件创建EbeanServer?

是的,不是。对我来说,您首先说“我们在使用DI / Guice / Spring吗”,通常,如果您是,那么您就有一个guice提供程序/ spring工厂bean来创建EbeanServer实例(因为最好使用具有更高级EbeanServer功能的编程配置) -例如,注入CurrentUserProvider实现)。然后,您还选择了是否要向Ebean单例注册EbeanServer实例,并以此方式另外可以使用Model / Finder / Ebean。

就配置文件而言,我的想法是,即使在以编程方式进行配置时,也最好启用外部属性配置,因此您首先要配置serverConfig.loadFromProperties(properties),然后以编程方式将其设置为serverConfig。这使您能够(即使您最初不使用它)通过属性/文件进行外部环境特定的配置。

如果根本不使用依赖注入(小型简单应用程序等),那么Ebean和ebean.properties是一种非常快速的简单机制。

希望对您的某些问题有所帮助。

干杯,罗布。

关于playframework - 在什么情况下应该使用Ebean或EbeanServer?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34147681/

10-09 18:43