Playframework 在什么情况下我应该使用Ebean或EbeanServer?

Playframework 在什么情况下我应该使用Ebean或EbeanServer?,playframework,ebean,Playframework,Ebean,我知道我可以使用Ebean或EbeanServer访问数据库。EbeanServer比Ebean有更多的API方法,Ebean上的许多方法,例如Ebean.find(Class)等,实际上只是在“默认/主要”EbeanServer上调用方法的一种方便方式 我的问题是: 我可以通过调用Ebean.getServer(字符串名)来获取EbeanServer对象,以使用EbeanServer提供的所有API吗 在什么情况下我应该在EbeanServer上使用Ebean(反之亦然) EbeanServ

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

我的问题是:

  • 我可以通过调用
    Ebean.getServer(字符串名)
    来获取EbeanServer对象,以使用EbeanServer提供的所有API吗
  • 在什么情况下我应该在EbeanServer上使用Ebean(反之亦然)
  • EbeanServer是否适合以编程方式创建EbeanServer
  • Ebean是否适合通过配置文件创建EbeanServer
在Play 2.4中,不需要ebean.properties,ebean配置可以放在application.conf中,我想我应该在Play framwork 2.4中使用ebean,对吗

谢谢你的建议


当您想要使用Ebean时,您的模型应该扩展
Ebean类。在这种情况下:

public class Task extends com.avaje.ebean.Model {}
当您也创建静态查找器时,您可以使用类进行查询:

List<Task> tasks = Task.find.all();
List tasks=Task.find.all();
你读过:


特别是这一部分:

首先,我们可以从一个角度来看,Ebean拥有EbeanServer实例的寄存器/映射,其中一个实例可以定义为默认服务器

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

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

您可以同时使用这两者,这在依赖项注入场景中是合理的(请参阅)。因此,您可以使用Guice提供程序或springfactorybean创建EbeanServer实例,并将该实例注册到ebeansingleton。通过这种方式,您既可以使用DI(Guice/Spring)@Inject EbeanServer实例,也可以通过Ebean.getDefaultServer()获得完全相同的EbeanServer实例(通过这种方式,还可以使用Model/Finder/Ebean活动记录)

关于你的问题:

Q:EbeanServer适合以编程方式创建EbeanServer?

EbeanServer工厂用于创建EbeanServer实例。指

Q:我可以通过调用Ebean.getServer(字符串名称)来使用EbeanServer提供的所有API来获取EbeanServer对象吗?

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

Q:在什么情况下我应该在EbeanServer上使用Ebean(反之亦然)?

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

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

在我称之为的“活动记录”风格中,您喜欢使用Model/Finders/Ebean所产生的简单和相对干净的代码。我在会议上讨论这种风格

总之,使用Ebean还是EbeanServer是一个风格问题。我将其描述为“传统DI”和“活动记录”风格

现在我还需要指出,在DI的情况下,如果需要,您可以同时使用这两种样式。您既可以@Inject EbeanServer实例,也可以通过Ebean访问它,以启用模型/查找器和活动记录样式的使用。在DI的情况下,这是合理的,您希望对EbeanServer实例进行编程配置,但仍然希望能够通过模型和查找器使用活动记录样式

测试:

测试也包括在内。avaje ebeanorm mocker项目特别提供了通过Ebean/Model/Finder使用EbeanServer实例时模拟这些实例的机制,因此在使用avaje ebeanorm mocker时,可以提供与使用传统EbeanServer注入时相同级别的可测试性

Q:Ebean适合通过配置文件创建EbeanServer?

好的,是和否。对我来说,你首先要说“我们正在使用DI/Guice/Spring吗?”如果你是,那么通常你有一个Guice provider/Spring工厂bean来创建EbeanServer实例(因为有更高级的EbeanServer特性的编程配置是很好的——例如,在CurrentUserProvider实现中注入)。然后,您还可以选择是否要向Ebean单例注册EbeanServer实例,并以这种方式使用Model/Finder/Ebean

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

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

希望这对你的一些问题有所帮助

干杯,罗伯