功能

查询指定字段
查询条件(精确/模糊)
分页
排序


接口

     /**
     * 通过条件查询
     * @param clazz 要查询的类
     * @param fieldName 要查询的指定字段 (如果指定要查询的字段,那么对应的实体类应该有参数的构造)
     * @param conFieldName 作为条件的字段
     * @param conFieldValue 作为条件字段对应的值
     * @param islike 每一个查询的字段对应一个值,字段是否进行模糊查询
     * @param page 是否翻页  null:不分页   int[2] 分页     pageNo , pageSize
     * @param desc 是否倒序
     * @param orderByField 排序字段
     * @return
     */
    public <T> List<T> getByConditions(Class<T> clazz, String[] fieldName , String[] conFieldName , String[] conFieldValue , Boolean[] islike , Integer[]page , Boolean desc ,String orderByField);

实现

    /**
     * 设置查询条件
     * @param sql sql语句
     * @param conFielddName 条件查询字段名
     * @param conFieldValue 字段对应的值
     * @param islike 查询条件的每一个字段是否要分页
     */
    private void setCondition(StringBuffer sql , String[] conFielddName , String[] conFieldValue ,Boolean[] islike){
        if(conFielddName != null && conFielddName.length>0){//如果有参数
            for (int i = 0; i < conFielddName.length; i++) {
                if(conFieldValue[i]!=null&&!conFieldValue[i].equals("")){//如果查询条件的值为空
                  //如果是第一个或者整个sql语句中还没有where关键字出现
                    if(i==0||sql.toString().indexOf("where")==-1){
                        if(islike!=null && islike[i])
                            sql.append(" where "+conFielddName[i] +" like '%"+ conFieldValue[i]+"%' ");
                        else
                            sql.append(" where "+conFielddName[i] +" = '"+ conFieldValue[i]+"' ");
                    }else if(i==conFielddName.length-1){//如果是最后一个参数,那么就加and
                        if(islike!=null && islike[i])
                            sql.append(" and "+conFielddName[i] +" like '%"+ conFieldValue[i]+"%'");
                        else
                            sql.append(" and "+conFielddName[i] +" = '"+ conFieldValue[i]+"' ");
                    }else{
                        if(islike!=null && islike[i])
                            sql.append(" and "+conFielddName[i] +" like '%"+ conFieldValue[i]+"%' and");
                        else
                            sql.append(" and "+conFielddName[i] +" = '"+ conFieldValue[i]+"' and");
                    }
                }else
                    continue;
            }
        }
    }



    public <T> List<T> getByConditions(Class<T> clazz, String[] fieldName , String[] conFielddName , String[] conFieldValue , Boolean[] islike , Integer[]page , Boolean desc ,String orderByField) {
        //指定要查询的字段数组
        StringBuilder fields = new StringBuilder();
        //sql语句
        StringBuffer sql = new StringBuffer();
        //是否指定查询字段
        if(fieldName!=null){
            for (int i = 0; i < fieldName.length; i++) {
                if(i == fieldName.length - 1){
                    fields.append(fieldName[i]);
                }else{
                    fields.append(fieldName[i]+",");
                }
            }
            //拼接指定字段的sql
            sql.append("select new " + clazz.getName()+"("+fields+") from " + clazz.getName()+" ");
        }else{
            sql.append("from " + clazz.getName() + " ");
        }

        //设置条件
        setCondition(sql , conFielddName , conFieldValue ,islike );

        if(desc!=null && desc)
            sql.append(" order by "+ orderByField +" desc ");
        else
            sql.append(" order by "+ orderByField +" asc ");

        Query query=getHibernateTemplate().getSessionFactory().openSession().createQuery(sql.toString());
        //设置翻页信息
        if(page!=null && page.length == 2){
            query.setFirstResult( (page[0] -1) * page[1] );
            query.setMaxResults(page[1]);
        }

        return query.list();
    }