![]() |
1
12
“查询对象模式”中的“模式”一词放错了位置。这不是真正的设计模式。“查询对象”只是 Interpreter Pattern . 遗产 Hibernate Criteria API 与现代 JPA2 Criteria API 是将它与 Builder Pattern . 关于你的问题:
我建议你看看 JPA2 . |
![]() |
2
4
查询对象 表示数据库查询的对象。 有关完整描述,请参阅 here SQL可以是一种复杂的语言,许多开发人员并不特别熟悉它。此外,您需要知道组成查询的数据库模式是什么样子的。您可以通过创建专门的finder方法来避免这种情况,这些方法将SQL隐藏在参数化方法中,但这使得很难形成更多的即席查询。如果数据库模式发生变化,它还会导致SQL语句中的重复。 一个查询对象是一个解释器[四个一组],也就是说,一个对象的结构,可以形成一个SQL查询。可以通过引用类和字段而不是表和列来创建此查询。这样,编写查询的人员就可以独立于数据库模式来完成这项工作,并且对模式的更改可以在单个位置进行本地化。 |
![]() |
3
2
我在这里为nhibernate编写了一个C实现: https://github.com/shaynevanasperen/NHibernate.Sessions.Operations . 它通过使用这样的接口工作:
给定这样的POCO实体类:
您可以这样构建查询对象:
然后像这样使用它们:
如果你喜欢它,你可以把它移植到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 |