場景-總體思路
- 微服務(wù)跨庫枪狂,通過接口調(diào)用
- 因分表分庫無法通過
xml
里的sql進(jìn)行聯(lián)表管理查詢 - 字段中文模糊查詢弹渔,而業(yè)務(wù)表里存的是中文名稱在表中對應(yīng)的id萧豆,故需要在另一個數(shù)據(jù)庫進(jìn)行扫倡,通過模塊查詢出關(guān)聯(lián)表的id坟漱,列表
List<String> idList
-
Mybatis
內(nèi)置分頁攔截去掉,改用java8
內(nèi)存分頁 - 查出所有數(shù)據(jù)慨代,通過
java8
流式過濾出數(shù)據(jù)
java8內(nèi)存分頁
/**
* @description:java8內(nèi)存分頁
*
* @param records 待分頁的數(shù)據(jù)
* @param pageNum 當(dāng)前頁碼
* @param pageSize 每頁顯示的條數(shù)
* @return 分頁之后的數(shù)據(jù)
*/
public static <T> List<T> pagination(List<T> records, int pageNum, int pageSize) {
if (CollectionUtils.isEmpty(records)) {
return Collections.emptyList();
}
int totalCount = records.size();
int remainder = totalCount % pageSize;
int pageCount = (remainder > 0) ? totalCount/pageSize + 1 : totalCount/pageSize;
int zero = 0;
if (remainder == zero) {
return records.stream()
.skip((pageNum - 1) * pageSize)
.limit(pageSize)
.collect(Collectors.toList());
} else {
if (pageNum == pageCount) {
return records.stream()
.skip((pageNum - 1) * pageSize)
.limit(totalCount)
.collect(Collectors.toList());
} else {
return records.stream()
.skip((pageNum - 1) * pageSize)
.limit(pageSize)
.collect(Collectors.toList());
}
}
}
方法skip()
的參數(shù)n的四種情況:
- 當(dāng)n<0時邢笙,拋IllegalArgumentException異常;
- 當(dāng)n=0時侍匙,相當(dāng)沒有跳過任何元素氮惯,原封不動、完璧歸趙
- 當(dāng)0<n<length時想暗,跳過n個元素后妇汗,返回含有剩下的元素的流;
- 當(dāng)n>=length時说莫,跳過所有元素杨箭,返回空流。
方法limit()
的參數(shù)n的四種情況: - 當(dāng)n<0時储狭,拋IllegalArgumentException異常互婿;
- 當(dāng)n=0時捣郊,不取元素,返回空流慈参;
- 當(dāng)0<n<length時呛牲,取前n個元素,返回新的流驮配;
- 當(dāng)n>=length時侈净,取所有元素。
java8 過濾
private List<User> getUsers(List<UserVo> userVoList, String type, List<User> UserList) {
List<String> userId = userVoList.stream()
.filter(userVo -> StringUtils.isNotBlank(type) && userVo.getUserName().contains(type))
.map(UserVo::getId)
.collect(Collectors.toList());
int size = UserList.size();
List<User> users = null;
if (size > 0 && UserList != null){
users = UserList.stream()
.filter(user -> userId.stream().anyMatch(id -> id.equals(userId.getUserName())))
.collect(Collectors.toList());
}
return users;
}