这期内容当中小编将会给大家带来有关Hibernate中怎么实现多条件查询,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
1. Hibernate多条件查询通用方法
//value[i]为第i个查询条件propertyName[i]的值 (本方法已通过测试) /*多条件查询,查询条件的值为空时自动除去该条件 * rigor为true时采用精确查询 */ 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(); closeSession(session); return list; } catch (RuntimeException re) { log.error("find by property name failed", re); throw re; } }
2:hibernate多条件组合查询 之 sql 拼接
这个方法与上面第一节中的相同,只不过上面的方法是将搜索的多个条件在外部(即调用方)封装在了数组中。
public static void main(String[] args) { Session session = null; Transaction tx = null; List list = null; Criteria criteria = null; try { session = HibernateSessionFactory.getSession(); tx = session.beginTransaction(); DetachedCriteria detachedCriteria = DetachedCriteria .forClass(InfoTab.class); String sql=" 1=1 "; Integer pareaId = 0; // 父地区; Integer careaId = 0; // 子地区; Integer categoryId = 0; // 类别; String infoPrivider = "中介"; // 来源; String houseType= "地下室"; // 房屋类型; Integer hxBedRoom=0; // 室; Integer hxLivingRoom=0; // 厅; String hzHouseStatus="有房出租"; // 合租类型; String hzRequestSex="男"; // 性别要求; String fixUp="尚未"; // 装修程度; Integer lcHeightMolecuse=0; // 楼层; String orientation="东南"; // 朝向要求; Integer buildArea=2000; // 建筑面积; Integer useArea=80; // 使用面积; Integer rentalDigit=2000; // 租金/价格; String title= "出租"; // 标题; if(pareaId!=0) { sql+="pareaId=" + pareaId; } if(careaId!=0) { sql+=" and careaId=" + careaId; } if(categoryId!=0) { sql+=" and categoryId=" + categoryId; } if(!infoPrivider.equals("")) { sql+=" and infoPrivider='" + infoPrivider + "'"; } if(!houseType.equals("")) { sql+=" and houseType='" + houseType +"'"; } if(hxBedRoom!=0) { sql+=" and hxBedRoom=" + hxBedRoom; } if(hxLivingRoom!=0) { sql+=" and hxLivingRoom=" + hxLivingRoom; } if(!hzHouseStatus.equals("")) { sql+=" and hzHouseStatus='" + hzHouseStatus + "'"; } if(!hzRequestSex.equals("")) { sql+=" and hzRequestSex='" + hzRequestSex +"'"; } if(!fixUp.equals("")) { sql+=" and fixUp='" + fixUp + "'"; } if(lcHeightMolecuse!=0) { sql+=" and lcHeightMolecuse=" + lcHeightMolecuse; } if(!orientation.equals("")) { sql+=" and orientation='" + orientation + "'"; } if(buildArea!=0) { sql+=" and buildArea=" + buildArea; } if(useArea!=0) { sql+=" and useArea=" + useArea; } if(rentalDigit!=0) { sql+=" and rentalDigit=" + rentalDigit; } if(!title.equals("")) { sql+=" and title like '%" + title + "%'"; } sql+=" order by id desc"; System.out.println(sql); detachedCriteria.add(Restrictions.sqlRestriction(sql)); criteria = detachedCriteria.getExecutableCriteria(session); list = criteria.list(); for(int i=0;i< list.size();i++) { InfoTab infoTab = (InfoTab)list.get(i); System.out.println(infoTab.getTitle() +" "+ infoTab.getCategoryId() +" "+ infoTab.getPareaName() +" "+ infoTab.getCareaName() +" " + infoTab.getHouseType() +" " + infoTab.getInfoPrivider()); } tx.commit(); } catch (HibernateException he) { he.printStackTrace(); } }
上述就是小编为大家分享的Hibernate中怎么实现多条件查询了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。