读书人

Platon式的思考:一个关于Hibernate多

发布时间: 2012-11-09 10:18:47 作者: rapoo

柏拉图式的思考:一个关于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 哥,是不是因为你的实体类中的一些字段不是包装类型导致的。。。?我之前也碰到过这样的问题,如果是基本数据类型就是有问题。。。

读书人网 >软件架构设计

热点推荐