使用Hibernate如何设计和实现搜索条件页面(具有多个可编辑/可选字段/下拉列表作为搜索条件),以便查询不会混淆数据访问者代码。我的意思是没有基于条件的查询字符串连接,最终所有查询都应该放在一个单独的xml文件中。我已经使用IBatis的动态查询完成了这样的实现。无法在Hibernate中找到这样的东西,所以我开始思考在hibernate中实现基于动态条件的页面的优雅方法。
答案 0 :(得分:4)
听起来你正在寻找Criteria
API:
http://docs.jboss.org/hibernate/core/3.5/reference/en/html/querycriteria.html
答案 1 :(得分:2)
因为我有同样的问题,我开发了一个Generic Dao类,允许动态(使用反射)根据分配给对象的值创建条件并查询数据库
e.g
国家/地区=新国家();
//这些值可以说它们是基于用户帖子在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
答案 2 :(得分:1)
我的第二个Affe的建议,Criteria API正是您正在寻找的,并且在处理动态查询时被推荐。我在Hibernate Querying 102 : Criteria API中非常清楚地说明了这一点,我在下面引用:
使用Hibernate Criteria API
Hibernate Criteria API提供了一个 优雅的动态建筑方式 Hibernate上的动态查询 - 持久化 数据库。使用这种技术, 以前的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更详细。
文章中显示的代码不言而喻,只是看看。