我知道我可以使用Ebean
或EbeanServer
访问数据库。 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/