我知道我可以使用Ebean
或EbeanServer
访问数据库.EbeanServer有比Ebean更多的API方法,Ebean上的许多方法Ebean.find(Class)
等实际上只是在'default/primary'EbeanServer上调用方法的一种方便方法.
我的问题:
我可以通过调用Ebean.getServer(String name)
使用EbeanServer提供的所有apis来获取EbeanServer对象吗?
在什么情况下我应该使用Ebean而不是EbeanServer(反之亦然)?
EbeanServer是否适合以编程方式创建EbeanServer?
Ebean适合通过配置文件创建EbeanServer吗?
在Play 2.4中,不需要ebean.properties,ebean配置可以放在application.conf中,我想我应该在Play framwork 2.4中使用Ebean,对吧?
谢谢你的建议.
EbeanServer api doc
Ebean api doc
首先,查看它的一种方法是Ebean拥有EbeanServer实例的寄存器/映射,其中一个实例可以定义为默认服务器.
但是,没有要求使用Ebean或注册EbeanServer实例.也就是说,可以创建EbeanServer实例并且不向Ebean注册,这样你就不需要/使用/想要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对象,以使用EbeanServer提供的所有apis吗?
是假设已注册EbeanServer实例(这是可选的).请参阅ServerConfig.setRegister(boolean)和ServerConfig.setDefaultServer(boolean).
问:在什么情况下我应该使用Ebean而不是EbeanServer(反之亦然)?
在所有情况下,您在技术上都在使用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访问它以启用模型/ 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(属性),然后以编程方式将事物设置为serverConfig.这使您能够(即使您最初不使用它)通过属性/文件进行外部环境特定配置.
如果您根本不使用依赖注入(小型简单应用程序等),那么Ebean和ebean.properties是一种非常快速的简单机制.
希望这有助于你的一些问题.
干杯,罗布.