根据实体反射以及map查询

本文介绍了一种使用Map作为参数在数据库中查询实体的方法。通过将查询条件存储在Map中,可以灵活地添加多种查询方式,如等于、小于、大于等,并支持对集合类型的查询。此外,还展示了如何在Hibernate中实现这一查询逻辑。
摘要由CSDN通过智能技术生成
 //根据map查找实体
Map<String, Object> entrys = new HashMap<String, Object>();
if (StringUtil.isNotEmpty(declareType)) {
   entrys.put("type", "1");
}
List<T> rlist = commonDao.findByMapProperty(T.class, entrys);
public <T> List<T> findByMapProperty(Class<T> entityClass,
      Map<String, Object> entrys) ;
//dao实现
public <T> List<T> findByMapProperty(Class<T> entityClass,
      Map<String, Object> entrys) {
   Criteria criteria = getSession().createCriteria(entityClass);
   for (String key:entrys.keySet()) {
      Object value = entrys.get(key);
      String queryWay  = "eq";
      if(key.indexOf(":")!=-1){
         if(key.split(":").length>=2){
            queryWay= key.split(":")[1];
         }
         key = key.split(":")[0];
      }
      
      if(value!=null){
         if("le".equals(queryWay)){
            criteria.add(Restrictions.le(key, value));
         }else if("lt".equals(queryWay)){
            criteria.add(Restrictions.lt(key, value));
         }else if("ge".equals(queryWay)){
            criteria.add(Restrictions.ge(key, value));
         }else if("gt".equals(queryWay)){
            criteria.add(Restrictions.gt(key, value));
         }else if("like".equals(queryWay)){//like未添加%%则装值时需要自行添加
            criteria.add(Restrictions.like(key, value));
         }else if("ne".equals(queryWay)){
            criteria.add(Restrictions.ne(key, value));
         }else if("not".equals(queryWay)){
            Object obj = value;
            if (obj instanceof Collection){
               List clist =(List)obj;
               criteria.add(Restrictions.not(Restrictions.in(key, clist)));
            }                          
         }else if("in".equals(queryWay)){
            Object obj = value;
            if (obj instanceof Collection){
               List clist =(List)obj;
               criteria.add(Restrictions.in(key, clist));
            }                       
         }else if("order".equals(queryWay)){
            criteria.addOrder(Order.desc(key));
         }else{
            criteria.add(Restrictions.eq(key, value));
         }
      }else{
         criteria.add(Restrictions.isNull(key));
      }
      
   }
   return (List<T>) criteria.list();
   
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值