首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Platon式的思考:一个关于Hibernate多条件查询

2012-11-09 
柏拉图式的思考:一个关于Hibernate多条件查询今天写Dao层访问数据库的时候,由于是查询的是多条件的,所以刚

柏拉图式的思考:一个关于Hibernate多条件查询
  今天写Dao层访问数据库的时候,由于是查询的是多条件的,所以刚开始用的是findByExample这个Hibernate自动生成的SpringDao ,将所有的条件放在了一个Example中 ,这样去找,但是发现与Example其中一个类属性不一样的也被找到了,很是纳闷,以前也没有遇到过这种现象,想看一下源码,发现机子上没有安装,上网搜了以下findByExample的原理,也没有找到。无奈之下,换条路走,于是自己写了一个多条件查询的Dao(参考网上的资料 ,哈哈哈):代码如下


public List searchByPropertys(String model,String[]propertyName,Object[] value,int page,boolean rigor){ 
    StringBuffer sqlBuffer = new StringBuffer();
    String ralation=" like ";
    if(rigor){
     ralation=" = ";
    }
    sqlBuffer.append("from "+model+" as model\n");
    int len=propertyName.length;
    List list=new ArrayList();
    boolean first=true;
    for(int i=0;i<len;i++){
     if(value[i]!=null){
     if(first){   
      sqlBuffer.append(" where "+ "model."+ propertyName[i] + ralation+" ?\n");   
      list.add(value[i]);
      first=false;
     }else{   
      sqlBuffer.append(" and "+ "model."+ propertyName[i] +ralation+ " ?\n");   
      list.add(value[i]);
     }
    }
    }
 
     try {         
      Session session=getSession();
             Query queryObject = session.createQuery(sqlBuffer.toString());
             for(int i=0;i<list.size();i++){
             if(rigor){
              queryObject.setParameter(i, list.get(i));
             }else{
              queryObject.setParameter(i, "%"+list.get(i)+"%");
             }
          
      }
         
            list=queryObject.list();
            session.close();
      return list;
         } catch (RuntimeException re) {
            log.error("find by property name failed", re);
            throw re;
         }

}
这样的话就很容易的实现了多条件查询,还考虑到了模糊查询。不过findByExample 的问题仍然和纳闷,期待高手指点。
1 楼 bennypan1980 2012-04-07   哥,是不是因为你的实体类中的一些字段不是包装类型导致的。。。?我之前也碰到过这样的问题,如果是基本数据类型就是有问题。。。

热点排行