在我们的项目中,我们有一个bean,但我们也希望在该bean上表达标准的CRUD查询。我们希望能够过滤某些字段(范围,等式,排除等)。现在我们正在考虑使用一个代表这样一组过滤器的SearchBean。但是我们意识到这个搜索bean几乎与我们的实际bean相同,而且我们很难想出更优雅的解决方案。
解决此问题的好方法是什么?我们不会寻找任何特定于框架的解决方案。
答案 0 :(得分:1)
假设您要在应用程序服务器中处理它。 您可以考虑使用其中之一 番石榴收藏
http://scaramoche.blogspot.com/2010/08/googles-guava-library-tutorial-part-4.html
或 CollectionUtils
和来自BeanUtils的BeanPredicate
http://commons.apache.org/beanutils/v1.8.2/apidocs/org/apache/commons/beanutils/BeanPredicate.html
您必须为要支持的过滤器类型实现Predicate类。
答案 1 :(得分:0)
我担心这个问题太开放无法给出一个好的答案。这实际上取决于你的目标是什么。此外,您没有明确提到您正在使用数据库(而不是搜索内存),但我假设您是。
你的方法(findEntitiesLikeMe)听起来像一个简单的方法。
你可以实现很多查询语言(JPQL / SQL /等)(通过清理查询并将其传递给较低层或直接解析查询)。
如果您的服务器结构足够树,您可以接受XPath并返回与XPath匹配的对象空间。
这三种方法都可以为您提供范围,平等和排除。我的建议是保持简单(听起来不错),直到它崩溃(由于性能,或复杂的客户端API,或缺乏灵活性),然后更改为更好的东西。
最终,一个成熟的查询语言可能会给你最大的灵活性,但可能是最难实现的,特别是如果你正在解析查询而不是将它传递给较低层。