lambdaQueryWrapper多條件嵌套查詢方式
更新時(shí)間:2022年01月11日 09:28:42 作者:吃蘋果配蘿卜
這篇文章主要介紹了lambdaQueryWrapper多條件嵌套查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
lambdaQueryWrapper多條件嵌套查詢
需求:根據(jù)條件獲取一段時(shí)期內(nèi)按照年份和周存儲(chǔ)的數(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 運(yùn)營商
* @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 {
//因?yàn)镴ava8 Lambda表達(dá)式中最終變量問題,重新賦值一個(gè)參數(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ù)列表錯(cuò)誤,錯(cuò)誤信息為:", 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 DESCLambdaQueryWrapper 常用條件

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中調(diào)用DLL動(dòng)態(tài)庫的操作方法
在Java編程中,有時(shí)我們需要調(diào)用本地代碼庫,特別是Windows平臺(tái)上的DLL(動(dòng)態(tài)鏈接庫),本文中,我們將詳細(xì)討論如何在Java中加載和調(diào)用DLL動(dòng)態(tài)庫,并通過具體示例來展示這個(gè)過程,感興趣的朋友跟隨小編一起看看吧2024-03-03
Java基礎(chǔ)之創(chuàng)建虛擬機(jī)對(duì)象的過程詳細(xì)總結(jié)
本文基于虛擬機(jī)HotSpot和常用的內(nèi)存區(qū)域Java堆深入對(duì)象分配、布局和訪問的全過程,文中有非常詳細(xì)的圖文解說,對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05
Spring Security代碼實(shí)現(xiàn)JWT接口權(quán)限授予與校驗(yàn)功能
本文給大家介紹Spring Security代碼實(shí)現(xiàn)JWT接口權(quán)限授予與校驗(yàn)功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-12-12

