在Hibernate中实现基于标准的搜索页面的优雅方式

时间:2010-10-08 19:25:22

标签: java hibernate orm java-ee ibatis

使用Hibernate如何设计和实现搜索条件页面(具有多个可编辑/可选字段/下拉列表作为搜索条件),以便查询不会混淆数据访问者代码。我的意思是没有基于条件的查询字符串连接,最终所有查询都应该放在一个单独的xml文件中。我已经使用IBatis的动态查询完成了这样的实现。无法在Hibernate中找到这样的东西,所以我开始思考在hibernate中实现基于动态条件的页面的优雅方法。

3 个答案:

答案 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更详细。

文章中显示的代码不言而喻,只是看看。

相关问题

资源