在我们的项目中,我们有一个bean,但我们也想在该bean上表达标准的CRUD查询。我们希望能够过滤某些字段(范围、等式、排除等)。现在,我们正在考虑使用一个SearchBean来表示这样一组过滤器。然而,我们意识到这个搜索bean与我们实际的bean几乎完全相同,我们很难找到一个更优雅的解决方案。
解决这个问题的好方法是什么?我们不寻找任何特定于框架的解决方案。
发布于 2011-02-23 12:38:58
假设您想在应用程序服务器中处理它。您可以考虑使用任一芭乐集合
http://scaramoche.blogspot.com/2010/08/googles-guava-library-tutorial-part-4.html
或CollectionUtils
http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html#filter%28java.util.Collection,%20org.apache.commons.collections.Predicate%29
和来自BeanUtils的BeanPredicate
http://commons.apache.org/beanutils/v1.8.2/apidocs/org/apache/commons/beanutils/BeanPredicate.html
您必须为您想要支持的过滤器类型实现谓词类。
发布于 2011-02-23 11:56:06
恐怕这个问题太开放了,不能给出一个好的答案。这真的取决于你的目标是什么。此外,您还没有明确提到您正在使用数据库(而不是搜索内存),但我假设您正在使用数据库。
您的方法(findEntitiesLikeMe)听起来像是一种很好的简单方法。
有很多查询语言(JPQL/SQL/等)。您可以(通过清理查询并将其传递到较低层,或者通过直接解析查询)来实现。
如果您的服务器结构足够像树一样,那么您可以接受XPath并返回与XPath匹配的对象空间。
这三种方法都为您提供了范围、等式和排除。
归根结底,成熟的查询语言可能会为您提供最大的灵活性,但实现起来可能是最困难的,尤其是在解析查询而不将其传递到较低层的情况下。
https://stackoverflow.com/questions/5085962
复制相似问题