您的位置:首页 > 其它

Hibernate Criteria 组合查询条件

2014-06-05 16:07 417 查看
Restrictions.eq --> equal,等于.

Restrictions.allEq -->
参数为Map对象,使用key/value进行多个等于的比对,相当于多个Restrictions.eq 的效果

Restrictions.gt --> great-than > 大于

Restrictions.ge --> great-equal >= 大于等于

Restrictions.lt --> less-than, < 小于

Restrictions.le --> less-equal <= 小于等于

Restrictions.between --> 对应SQL的between子句

Restrictions.like --> 对应SQL的LIKE子句

Restrictions.in --> 对应SQL的in子句

Restrictions.and --> and 关系

Restrictions.or --> or 关系

Restrictions.isNull --> 判断属性是否为空,为空则返回true

Restrictions.isNotNull --> 与isNull相反

Restrictions.sqlRestriction --> SQL限定的查询

Order.asc --> 根据传入的字段进行升序排序

Order.desc --> 根据传入的字段进行降序排序

MatchMode.EXACT --> 字符串精确匹配.相当于"like
'value'"

MatchMode.ANYWHERE --> 字符串在中间匹配.相当于"like
'%value%'"

MatchMode.START --> 字符串在最前面的位置.相当于"like
'value%'"

MatchMode.END --> 字符串在最后面的位置.相当于"like
'%value'"

 


Configuration config = new Configuration();  

SessionFactory sessionFactory = config.configure().buildSessionFactory();  

  

Criteria criteria = session.createCriteria(MyPoJo.class);  

  

//等于条件  

//Restrictions.eq(String,object);  

criteria.add(Restrictions.eq("UserID", 1001));  

  

//其它条件以此类推  

 Restrictions.gt 对应SQL中的 “field > value ” 表达式  

 Restrictions.ge 对应SQL中的 “field >= value” 表达式  

 Restrictions.lt 对应SQL中的 “field < value” 表达式  

 Restrictions.le 对应SQL中的 “field <= value” 表达式  

 Restrictions.between 对应SQL中的 “between” 表达式  

 Restrictions.in 传入一个数组进行IN查询  

 Restrictions.like 进行模糊查询  

 Restrictions.ilike 不区分大小写的模糊查询  

Java代码  


  

    public Pager getSuSongFIn(String JLID, String jiaoKuanBM, String anJianBS,  

            String jiaoKuanRBM, double yuJiaoJE, String chuangJianRBM,  

            String SYS_TIME_START, String SYS_TIME_END,  

            String yuJiaoSJ_START,String yuJiaoSJ_END,String queRenSJ_START,String queRenSJ_END, int is_Complete,  

            String chuangJianR,String jiaoKuanR,String queRenR,String feiYongLX,int is_ZhiXing,  

            String sortName, String sortOrder,int pageNo,int pageSize) {  

          

        Pager pager = new Pager();//分页的装载工具类  

          

        try {  

            Criteria criteria = daoTool.createCriteria(TSpSsfIn.class);//创建Hibernate参数式查询  

               

            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd");//定义日期格式化工具,用于查询条件增加  

              

            //判断组装查询条件  

            if(StringHelper.isNotEmpty(JLID)){  

                criteria.add(Restrictions.eq("JLID", JLID));  

            }  

              

            if(StringHelper.isNotEmpty(jiaoKuanBM)){  

                criteria.add(Restrictions.eq("jiaoKuanBM", jiaoKuanBM));  

            }  

              

            if(StringHelper.isNotEmpty(feiYongLX)){  

                criteria.add(Restrictions.eq("feiYongLX", feiYongLX));  

            }  

              

            if(StringHelper.isNotEmpty(anJianBS)){  

                criteria.add(Restrictions.eq("anJianBS", anJianBS));  

            }  

              

            if(StringHelper.isNotEmpty(jiaoKuanRBM)){  

                criteria.add(Restrictions.eq("jiaoKuanRBM", jiaoKuanRBM));  

            }  

              

            if(yuJiaoJE != -1){  

                criteria.add(Restrictions.eq("yuJiaoJE", yuJiaoJE));  

            }  

              

            if(StringHelper.isNotEmpty(yuJiaoSJ_START)){  

                criteria.add(Restrictions.ge("yuJiaoSJ", Timestamp.valueOf(yuJiaoSJ_START + " 00:00:00")));  

            }  

              

            if(StringHelper.isNotEmpty(yuJiaoSJ_END)){  

                criteria.add(Restrictions.le("yuJiaoSJ", Timestamp.valueOf(yuJiaoSJ_END + " 23:59:59")));  

            }  

              

            if(StringHelper.isNotEmpty(SYS_TIME_START)){   

                criteria.add(Restrictions.ge("SYS_TIME", Timestamp.valueOf(SYS_TIME_START + " 00:00:00")));  

            }  

              

            if(StringHelper.isNotEmpty(SYS_TIME_END)){  

                criteria.add(Restrictions.le("SYS_TIME", Timestamp.valueOf(SYS_TIME_END + " 23:59:59")));  

            }  

              

            if(StringHelper.isNotEmpty(queRenSJ_START)){  

                criteria.add(Restrictions.ge("queRenJKRQ", Timestamp.valueOf(queRenSJ_START + " 00:00:00")));  

            }  

              

            if(StringHelper.isNotEmpty(queRenSJ_END)){  

                criteria.add(Restrictions.le("queRenJKRQ", Timestamp.valueOf(queRenSJ_END + " 00:00:00")));  

            }  

              

            if(is_Complete != -1){  

                criteria.add(Restrictions.eq("is_Complete", is_Complete));  

            }  

              

            if(is_ZhiXing != -1){  

                criteria.add(Restrictions.eq("is_ZhiXing", is_ZhiXing));  

            }  

              

            if(StringHelper.isNotEmpty(chuangJianR)){  

                criteria.createAlias("creator", "creator");//增加表关联并做查询操作(等同于在SQL中加入了两张表的直等关联,具体关联子表用什么字段是通过HRM.XML配置文件进行配置)  

                criteria.add(Restrictions.ilike("creator.userName", chuangJianR,MatchMode.ANYWHERE));  

            }  

              

            if(StringHelper.isNotEmpty(queRenR)){  

                criteria.createAlias("userInfo", "userInfo");//增加表关联并做查询操作  

                criteria.add(Restrictions.ilike("userInfo.userName", queRenR,MatchMode.ANYWHERE));  

            }  

              

            if(StringHelper.isNotEmpty(jiaoKuanR)){  

                criteria.add(Restrictions.ilike("jiaoKuanR", jiaoKuanR,MatchMode.ANYWHERE));  

            }  

              

  

  

              

            // 获取根据条件分页查询的总行数    

            int rowCount = (Integer) criteria.setProjection(Projections.rowCount()).uniqueResult();    

            criteria.setProjection(null);    

              

            //进行排序判断方式和需要排序的字段并加入  

            if(StringHelper.isNotEmpty(sortName) && StringHelper.isNotEmpty(sortOrder)){  

                if(sortOrder.equals("asc")){  

                    criteria.addOrder(Order.asc(sortName));  

                }else if(sortOrder.equals("desc")){  

                    criteria.addOrder(Order.desc(sortName));  

                }  

            }  

              

            //设置分页信息  

            criteria.setFirstResult((pageNo - 1) * pageSize);  //从那条数据开始  

            criteria.setMaxResults(pageSize);  //获取条数  

        

            criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);  //只返回根对象,不加此限制结果将返回数组,包含根对象与关联对象      

            List result = criteria.list(); //获取查询结果  

              

            //装载查询结果  

            pager.setPageNo(pageNo);  

            pager.setPageSize(pageSize);  

            pager.setRowCount(rowCount);  

            pager.setResult(result);  

              

              

        } catch (Exception e) {  

            log.error("[SuSongFManagerImp.getSuSongFIn(String JLID, String jiaoKuanBM, String anJianBS," +  

                    "String jiaoKuanRBM, double yuJiaoJE, String chuangJianRBM," +  

                    "String SYS_TIME_START, String SYS_TIME_END, int is_Complete," +  

                    "String sortName, String sortOrder,int pageNo,int pageSize)]"+e.getMessage());  

        }  

          

          

        return pager;  

    }  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: