lambdaQueryWrapper多條件嵌套查詢方式
更新時間:2022年01月11日 09:28:42 作者:吃蘋果配蘿卜
這篇文章主要介紹了lambdaQueryWrapper多條件嵌套查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。
lambdaQueryWrapper多條件嵌套查詢
需求:根據(jù)條件獲取一段時期內(nèi)按照年份和周存儲的數(shù)據(jù)
表結(jié)構(gòu)如下
userNetType | moduleName | cityName | subjectCname | subjectEname | pv | uv | year | week |
---|---|---|---|---|---|---|---|---|
1 | 1 | 江蘇省 | 死神專題 | sszt | 100 | 70 | 2019 | 51 |
1 | 1 | 江蘇省 | 海賊王專題 | hzwzt | 200 | 80 | 2019 | 52 |
1 | 1 | 江蘇省 | 火影忍者專題 | hyrzzt | 300 | 90 | 2020 | 01 |
/** * @param pageNum 當(dāng)前頁 * @param pageSize 每頁條數(shù) * @param moduleName 產(chǎn)品 * @param userNetType 運營商 * @param cityName 城市名稱 * @param beginTime 開始周的任意一天日期(例如:2019-12-20) * @param endTime 結(jié)束周的任意一天日期(例如:2020-01-20) * @param keyWord 查詢條件(專題英文名或者中文名) * @return */ //開始年份 String beginYear = null; //結(jié)束年份 String endYear = null; //開始周數(shù) String beginWeek = null; //結(jié)束周數(shù) String endWeek = null; /*這部分內(nèi)容忽略,調(diào)用了其他的方法, 反正就是為了獲取開始日期所在的年份、周數(shù)以及結(jié)束日期所在的年份、周數(shù)*/ if (StringUtils.isBlank(beginTime) || StringUtils.isBlank(endTime)) { DateTime dateTime = DateUtil.lastWeek(); //格式化日期,結(jié)果:yyyyMMdd beginTime = DateUtil.formatDate(dateTime); beginYear = TimeUtils.getDateOfYearWeek(beginTime).get("year"); endYear = beginYear; beginWeek = TimeUtils.getDateOfYearWeek(beginTime).get("week"); endWeek = beginWeek; } else { beginYear = TimeUtils.getDateOfYearWeek(beginTime).get("year"); endYear = TimeUtils.getDateOfYearWeek(endTime).get("year"); beginWeek = TimeUtils.getDateOfYearWeek(beginTime).get("week"); endWeek = TimeUtils.getDateOfYearWeek(endTime).get("week"); } Page<DwSubjectDataInfoWw> page = new Page<>(pageNum, pageSize); LambdaQueryWrapper<DwSubjectDataInfoWw> queryWrapper = Wrappers.<DwSubjectDataInfoWw>lambdaQuery(); if (beginYear.equals(endYear)) { queryWrapper.eq(DwSubjectDataInfoWw::getYear, beginYear); queryWrapper.between(DwSubjectDataInfoWw::getWeek, beginWeek, endWeek); } else { //因為Java8 Lambda表達(dá)式中最終變量問題,重新賦值一個參數(shù)解決 String year1 = beginYear; String year2 = endYear; String week1 = beginWeek; String week2 = endWeek; queryWrapper.and(wrapper -> wrapper.and(wrapper1 -> wrapper1.eq(DwSubjectDataInfoWw::getYear, year1).ge(DwSubjectDataInfoWw::getWeek, week1)) .or(wrapper2 -> wrapper2.eq(DwSubjectDataInfoWw::getYear, year2).le(DwSubjectDataInfoWw::getWeek, week2))); } queryWrapper.orderByDesc(DwSubjectDataInfoWw::getYear); queryWrapper.orderByDesc(DwSubjectDataInfoWw::getWeek); if (StrUtil.isNotEmpty(cityName)) { queryWrapper.eq(DwSubjectDataInfoWw::getCityName, cityName); } if (StrUtil.isNotEmpty(userNetType)) { queryWrapper.eq(DwSubjectDataInfoWw::getUserNetType, userNetType); } if (StrUtil.isNotEmpty(moduleName)) { queryWrapper.eq(DwSubjectDataInfoWw::getModuleName, moduleName); } //搜索條件可以是專題中文名或英文名 if (StrUtil.isNotEmpty(keyWord)) { queryWrapper.and(wrapper -> wrapper.like(DwSubjectDataInfoWw::getSubjectCname, keyWord).or().like(DwSubjectDataInfoWw::getSubjectEname, keyWord)); } try { Page<DwSubjectDataInfoWw> list = dwSubjectDataInfoWwService.page(page, queryWrapper); return AjaxResult.success(list); } catch (Exception e) { logger.error("獲取分周專題數(shù)據(jù)列表錯誤,錯誤信息為:", e); return AjaxResult.error(); }
下面是根據(jù)條件生成的SQL語句
WHERE ( ( (year = ? AND week >= ?) OR (year = ? AND week <= ?) ) AND city_name = ? AND user_net_type = ? AND module_name = ? AND ( subject_cname LIKE ? OR subject_ename LIKE ? ) ) ORDER BY year DESC, week DESC
LambdaQueryWrapper 常用條件
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
idea自動加載html、js而無需重啟進(jìn)程的操作
這篇文章主要介紹了idea自動加載html、js而無需重啟進(jìn)程的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08SpringCloud Netflix Ribbon源碼解析(推薦)
這篇文章主要介紹了SpringCloud Netflix Ribbon源碼解析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03Java實現(xiàn)JS中的escape和UNescape代碼分享
在PHP和Python中都有類似JS中的escape和UNescape函數(shù)的功能,那么Java語言中到底有沒有類似的方法呢?本文就來介紹一下Java實現(xiàn)JS中的escape和UNescape轉(zhuǎn)碼方法,需要的朋友可以參考下2017-09-09java8 統(tǒng)計字符串字母個數(shù)的幾種方法總結(jié)(推薦)
下面小編就為大家分享一篇java8 統(tǒng)計字符串字母個數(shù)的幾種方法總結(jié)(推薦),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來吧2017-11-11