我需要在Java中爲我的可定製搜索界面(我正在編寫的webapp)實現查詢對象模式。查詢對象模式(設計模式)
有沒有人知道我在哪裏可以得到查詢對象模式(Martin Fowler's QoP)的示例/教程?
由於提前
加成如何查詢模式添加到現有的DAO模式?
我需要在Java中爲我的可定製搜索界面(我正在編寫的webapp)實現查詢對象模式。查詢對象模式(設計模式)
有沒有人知道我在哪裏可以得到查詢對象模式(Martin Fowler's QoP)的示例/教程?
由於提前
加成如何查詢模式添加到現有的DAO模式?
「查詢對象模式」中的「模式」一詞是(恕我直言)錯位。這不是一個真正的設計模式。 「查詢對象」只是Interpreter Pattern的另一個例子。傳統Hibernate Criteria API和現代JPA2 Criteria API是一個很好的例子,它與Builder Pattern相結合。
至於你的問題:
如何查詢模式添加到現有DAO模式?
我建議看看JPA2。
查詢對象
表示一個數據庫查詢的對象。
有關詳細說明見here
SQL可以是一個複雜的語言,很多開發商不是特別熟悉。此外,您需要知道數據庫模式是如何構成查詢的。您可以通過創建隱藏參數化方法內的SQL的專用查找程序方法來避免這種情況,但這使得難以形成更多即席查詢。如果數據庫模式發生變化,它還會導致SQL語句中的重複。
查詢對象是一個解釋器[Gang of Four],也就是可以形成SQL查詢的對象結構。您可以通過引用類和字段而不是表和列來創建此查詢。通過這種方式,編寫查詢的人可以獨立於數據庫模式進行操作,對模式的更改可以集中在一個地方。
你誤解了我的問題。我知道Query Object模式,我知道它在Martin Fowler的書中有描述。我想查看用於查詢對象的設計模式。 – 2011-12-20 11:54:41
我在這裏爲NHibernate寫了一個C#實現:https://github.com/shaynevanasperen/NHibernate.Sessions.Operations。
它通過使用像這樣的接口:
public interface IDatabases
{
ISessionManager SessionManager { get; }
T Query<T>(IDatabaseQuery<T> query);
T Query<T>(ICachedDatabaseQuery<T> query);
void Command(IDatabaseCommand command);
T Command<T>(IDatabaseCommand<T> command);
}
給出一個POCO實體類是這樣的:
class Database1Poco
{
public int Property1 { get; set; }
public string Property2 { get; set; }
}
你可以建立查詢對象是這樣的:
class Database1PocoByProperty1 : DatabaseQuery<Database1Poco>
{
public override Database1Poco Execute(ISessionManager sessionManager)
{
return sessionManager.Session.Query<Database1Poco>().SingleOrDefault(x => x.Property1 == Property1);
}
public int Property1 { get; set; }
}
然後像這樣使用它們:
var database1Poco = _databases.Query(new Database1PocoByProperty1 { Property1 = 1 });
如果你喜歡它,你可以將它移植到Java。
下面是其他一些例子:
https://lostechies.com/jimmybogard/2012/10/08/favor-query-objects-over-repositories/ http://www.mrdustpan.com/command-query-objects-with-dapper#disqus_thread http://crosscuttingconcerns.com/CommandQuery-Object-pattern
這不應該是一個評論嗎? – 2015-08-13 19:29:09
我不這麼認爲。它通過提供示例代碼直接回答問題。 – Shayne 2015-08-14 00:22:32
注意休眠有一個很好的標準API(JPA 2.0還具有一個類型安全標準API現在)。 – 2010-01-15 00:43:21
我收集的是我應該轉移到Hibernate。 – 2010-01-15 09:57:04
類似的問題 - http://stackoverflow.com/questions/2265290/query-object-implementation-examples – JamesG 2010-02-27 05:14:28