在 Hibernate 中实现基于条件的搜索页面的优雅方式
Posted
技术标签:
【中文标题】在 Hibernate 中实现基于条件的搜索页面的优雅方式【英文标题】:Elegant way to implement a criteria-based search page in Hibernate 【发布时间】:2011-04-23 01:29:41 【问题描述】:使用 Hibernate,您将如何设计和实现搜索条件页面(该页面具有多个可编辑/可选字段/下拉菜单作为搜索条件),这样查询不应使数据访问器代码混乱。我的意思是没有基于条件的查询字符串连接,最终所有查询都应该放在一个单独的 xml 文件中。我已经使用 IBatis 的动态查询完成了这样的实现。在 Hibernate 中找不到这样的东西,所以我开始思考在 hibernate 中实现基于动态标准的页面的优雅方法是什么。
【问题讨论】:
就性能而言,我相信在 IBatis 中实现标准可以更好(更干净)。 Hibernate 并没有那么干净地解决这个问题,但由于它至少努力提供一个 API 来做到这一点,我会接受答案 【参考方案1】:毫无疑问,听起来您正在寻找Criteria
API:
http://docs.jboss.org/hibernate/core/3.5/reference/en/html/querycriteria.html
【讨论】:
是的,这正是 OP 要求的 +1【参考方案2】:我赞同 Affe 的建议,Criteria API 正是您正在寻找的,并且在处理动态查询时被推荐。我在下面引用的Hibernate Querying 102 : Criteria API 很好地说明了这一点:
使用休眠标准 API
Hibernate Criteria API 提供了一个 优雅的即时构建方式 Hibernate-persisted 上的动态查询 数据库。使用这种技术, 前面的 24 行示例可以编码 更简洁,更清楚地使用 仅仅 8 行代码:
Criteria criteria = session.createCriteria(Sale.class); if (startDate != null) criteria.add(Expression.ge("date",startDate); if (endDate != null) criteria.add(Expression.le("date",endDate); List results = criteria.list();
我们来看看使用 Hibernate Criteria API 更详细。
文章中显示的代码不言自明,请看一下。
相关问题
Hibernate: Criteria vs. HQL资源
Hibernate Querying 102 : Criteria API Hibernate Criteria API: Multi-Criteria Search Made Easy【讨论】:
【参考方案3】:因为我有同样的问题,我开发了一个通用 Dao 类,它允许动态(使用反射)根据分配给对象的值创建条件并查询数据库
例如 国家/地区=新国家/地区(); // 这些值可以说它们是根据用户帖子在您的 servlet 上分配的 country.setName("卢森堡");
// This is where your service layer starts. It gets as a param the Country object
GenericDaoDB gDaoDB = new GenericDaoDB();
try
List resultList = gDaoDB.list(country);
System.out.println("=========Result Print==============");
for(int i=0; i<resultList.size();i++)
Country resultCountry = (Country)resultList.get(i);
System.out.println("Name:"+ resultCountry.getName()+" Country Code:"+resultCountry.getCountryCode());
catch(BasisException e)
e.printStackTrace();
如果您喜欢查看http://sourceforge.net/apps/wordpress/jprovocateur/2010/09/23/simple-example-hibernate-query-the-database-without-hql-or-criteria/,您可以在其中找到更多详细信息和示例项目。
因为它是一个通用类,你可以将它用于你所有的 Pojos
【讨论】:
以上是关于在 Hibernate 中实现基于条件的搜索页面的优雅方式的主要内容,如果未能解决你的问题,请参考以下文章
如何使用hibernate在spring boot中实现分页
尝试在 wordpress 自定义页面中实现 jQuery 以进行搜索自动完成但不工作
使用 SwiftUI 在 WatchOS 中实现从主控制器导航到基于页面的控制器的问题