加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Jpa动态多表多条件联合查询,并对查询结果进行分页

发布时间:2020-12-15 05:27:42 所属栏目:Java 来源:网络整理
导读:public PageMapString,Object resourceList(TeachingInfo teachingInfo,Pageable pageable) { ... //int offset = (pageable.getPageNumber() - 1) * pageable.getPageSize(); ListMapString,String result = resourceInfoRepository.findResourceByConditio
public Page<Map<String,Object>> resourceList(TeachingInfo teachingInfo,Pageable pageable) {
        ...
        //int offset = (pageable.getPageNumber() - 1) * pageable.getPageSize();
        List<Map<String,String>> result = resourceInfoRepository.findResourceByCondition(chapterId,contentType,courseId,diffLevel,name,type,resourceType,pageable.getOffset(),pageable.getPageSize());
        int total = resourceInfoRepository.findResourceCountByCondition(chapterId,resourceType);
        //MDStringUtils.formatHumpNameForList(result)将List中map的key值命名方式由下划线转为驼峰命名
        return new PageImpl<>(MDStringUtils.formatHumpNameForList(result),pageable,total);
    }
    
    //if里的不为null是(!='')
    @Query(value = "select distinct ri.*,chapter_name,type  " +
            "from resource_info ri left join teaching_resource_info tri on tri.resource_id = ri.id left join teaching_info ti on ti.id = tri.teaching_id " +
            "where 1=1 " +
            "and IF (?1 != '',chapter_id = ?1,1=1) " +
            "and IF (?2 != '',content_type = ?2,1=1) " +
            "and IF (?3 != '',course_id = ?3,1=1) " +
            "and IF (?4 != '',diff_level = ?4,1=1) " +
            "and IF (?5 != '',ri.name like %?5%,1=1) " +
            "and IF (?6 != '',ti.type = ?6,1=1) " +
            "and IF (?7 != '',resource_type = ?7,1=1) limit ?8,?9",nativeQuery = true)
    List<Map<String,String>> findResourceByCondition(Long chapterId,String contentType,Long courseId,String diffLevel,String name,Integer type,String resourceType,long offset,int size);

    @Query(value = "select count(distinct ri.id) " +
            "from resource_info ri left join teaching_resource_info tri on tri.resource_id = ri.id left join teaching_info ti on ti.id = tri.teaching_id " +
            "where 1=1 " +
            "and IF (?1 != '',1=1) ",nativeQuery = true)
    int findResourceCountByCondition(Long chapterId,String resourceType);

 /**
     * 将List中map的key值命名方式格式化为驼峰
     *
     * @param
     * @return
     */
    public static List<Map<String,Object>> formatHumpNameForList(List<Map<String,String>> list) {
        List<Map<String,Object>> newList = new ArrayList<Map<String,Object>>();
        for (Map<String,String> o : list) {
            newList.add(formatHumpName(o));
        }
        return newList;
    }
    
    public static Map<String,Object> formatHumpName(Map<String,String> map) {
        Map<String,Object> newMap = new HashMap<String,Object>();
        Iterator<Map.Entry<String,String>> it = map.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<String,String> entry = it.next();
            String key = entry.getKey();
            String newKey = toFormatCol(key);
            newMap.put(newKey,entry.getValue());
        }
        return newMap;
    }

    public static String toFormatCol(String colName) {
        StringBuilder sb = new StringBuilder();
        String[] str = colName.toLowerCase().split("_");
        int i = 0;
        for (String s : str) {
            if (s.length() == 1) {
                s = s.toUpperCase();
            }
            i++;
            if (i == 1) {
                sb.append(s);
                continue;
            }
            if (s.length() > 0) {
                sb.append(s.substring(0,1).toUpperCase());
                sb.append(s.substring(1));
            }
        }
        return sb.toString();
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读