我需要在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