我即將在Lift框架中開始我的第一個項目,我必須決定選擇哪個持久性庫。我即將使用關係後端,因此Mapper和Record都可以投入使用。Mapper與Record/Squeryl
在Mapper的情況下 - 我最想念的事情是控制發送到RDBMS的查詢的能力 - 特別是當涉及更復雜的查詢時,可以通過SQL中的連接,聚合等來解決。看看下面的例子 - 讓我們有以下兩個實體:
class BaseProduct extends LongKeyedMapper[BaseProduct] with IdPK {
// some fields
}
object BaseProduct extends BaseProduct with LongKeyedMetaMapper[BaseProduct]
class MyProduct extends LongKeyedMapper[MyProduct] with IdPK {
// some fields
object base extends MappedLongForeignKey(this, BaseProduct)
}
object MyProduct extends MyProduct with LongKeyedMetaMapper[MyProduct]
哪裏MyProduct
是BaseProduct
實體一體的專業化。顯然這些實體之間有一對一的關係。不過,我已經拿出最好的可能性的確切MyProduct
查詢其BaseProduct
在一起就好像這樣的查詢:
MyProduct.findAll(PreCache(MyProduct.base))
哪些問題兩個查詢(而且我怕我不能夠控制哪些領域我想要選擇的MyProduct
實體
對Mapper庫來說足夠糟糕我對Record/Squeryl API的主要擔憂是它缺少Mapper API附近的所有Proto
類。一些與Record的這些類的功能接近的東西?是否可以訪問Squeryl中的數據庫特定功能(例如幾何PostgreSQL中的查詢)?
這些圖層中是否有其他優點和缺點?還是有任何其他的抽象層,如果我想與數據庫有良好的類型安全封裝的通信封裝,並提供對查詢的體面控制(我曾被用來直接使用PHP中的PDO層發佈查詢 - 不想要這樣的直接查詢接口,但有一些控制查詢的可能性會很大)與Lift框架的集成絕對是一個優勢。
謝謝!
謝謝! Squeryl對我來說似乎是一個很好的選擇......還有一個問題 - 我認爲沒有開箱即用的支持(如Mapper框架中的Proto類所提供的)不適用於Record/Squeryl。或者你知道一些具有類似功能的庫嗎? (或者我必須將Squeryl和Mapper集成到一個項目中,如果我需要這個功能而不需要自己動手的話) –
Squeryl/Record目前沒有現成的實現。我的理解是,沒有唯一的原因是由於ProtoUser中的id和定義主鍵的Squeryl的KeyedEntity中的id有衝突。使用0.9.6時,這應該很容易解決,並且在發佈時可能會被修復。同時,我可能會做的只是複製ProtoUser的代碼並修改您自己的版本以解決衝突。 – jcern