Java中LambdaQueryWrapper設(shè)置自定義排序代碼示例
MybatisPlus版本
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>3.4.2</version>
</dependency>定義MybatisPlus工具類
import com.baomidou.mybatisplus.core.conditions.ISqlSegment;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.xnt.product.common.core.core.domain.OrderBy;
import com.xnt.product.common.core.exception.CustomException;
import java.util.List;
import static com.baomidou.mybatisplus.core.enums.SqlKeyword.*;
/**
* @author wxm
*/
public class MybatisPlusUtil {
/**
* @param queryWrapper {@link LambdaQueryWrapper}
* @param column 排序字段
* @param asc 是否升序
* @param <T> 泛型
*/
public static <T> void setOrderOne(LambdaQueryWrapper<T> queryWrapper, String column, boolean asc) {
try {
ISqlSegment[] sqlSegments = {ORDER_BY, () -> column, asc ? ASC : DESC};
queryWrapper.getExpression().add(sqlSegments);
} catch (Exception e) {
e.printStackTrace();
throw new CustomException("設(shè)置排序出錯(cuò):" + e.getMessage());
}
}
/**
* @param queryWrapper {@link LambdaQueryWrapper}
* @param order {@link OrderBy} 排序
* @param <T> 泛型
*/
public static <T> void setOrder(LambdaQueryWrapper<T> queryWrapper, OrderBy order) {
setOrderOne(queryWrapper, order.getColumn(), order.isAsc());
}
/**
* @param queryWrapper {@link LambdaQueryWrapper}
* @param list {@link OrderBy} 排序
* @param <T> 泛型
*/
public static <T> void setOrder(LambdaQueryWrapper<T> queryWrapper, List<OrderBy> list) {
for (OrderBy order : list) {
setOrder(queryWrapper, order);
}
}
/**
* @param queryWrapper {@link LambdaQueryWrapper}
* @param orderItem {@link OrderItem} 排序
* @param <T> 泛型
*/
public static <T> void setOrderItem(LambdaQueryWrapper<T> queryWrapper, OrderItem orderItem) {
setOrderOne(queryWrapper, orderItem.getColumn(), orderItem.isAsc());
}
/**
* @param queryWrapper {@link LambdaQueryWrapper}
* @param list {@link OrderItem} 排序
* @param <T> 泛型
*/
public static <T> void setOrderItem(LambdaQueryWrapper<T> queryWrapper, List<OrderItem> list) {
for (OrderItem order : list) {
setOrderItem(queryWrapper, order);
}
}
}
定義OrderBy實(shí)體類
@Data
public class OrderBy {
/**
* 字段名稱
*/
@NotEmpty
private String column;
/**
* 排序類型 升序:asc 降序:desc
* 默認(rèn)升序
*/
private boolean asc = true;
/**
* 是否進(jìn)行駝峰轉(zhuǎn)下劃線
*/
private boolean toUnder = false;
public String getColumn() {
return isToUnder() ? StrUtil.toUnderlineCase(column) : column;
}
public String getColumn(boolean toUnder) {
return toUnder ? StrUtil.toUnderlineCase(column) : column;
}
/**
* 獲取 OrderItem
*
* @return
*/
public OrderItem getOrderItem() {
return getOrderItem(isAsc(), isToUnder());
}
/**
* 獲取 OrderItem
*
* @param isAsc 是否升序
* @return
*/
public OrderItem getOrderItem(boolean isAsc) {
return getOrderItem(isAsc, isToUnder());
}
/**
* 獲取 OrderItem
*
* @param isToUnder 是否進(jìn)行駝峰轉(zhuǎn)下劃線
* @return
*/
public OrderItem getOrderItemToUnder(boolean isToUnder) {
return getOrderItem(isAsc(), isToUnder);
}
/**
* 獲取 OrderItem
*
* @param sort 排序方式 升序:asc 降序:desc
* @param isToUnder 是否進(jìn)行駝峰轉(zhuǎn)下劃線
* @return
*/
public OrderItem getOrderItem(String sort, boolean isToUnder) {
return getOrderItem(isAsc(), isToUnder);
}
/**
* 獲取 OrderItem
*
* @param isAsc 是否升序
* @param isToUnder 是否進(jìn)行駝峰轉(zhuǎn)下劃線
* @return
*/
public OrderItem getOrderItem(boolean isAsc, boolean isToUnder) {
String col = isToUnder ? StrUtil.toUnderlineCase(column) : column;
return OrderItemUtils.getOrder(col, isAsc);
}
/**
* 獲取sql
* @return
*/
public String getSql(){
return (isToUnder() ? StrUtil.toUnderlineCase(column) : column) + (this.isAsc()? " asc":" desc");
}
}
使用自定義排序
1、獲取前段參數(shù)
public List<OrderBy> getOrderBys() {
String order = ServletUtils.getParameter(PageConstants.ORDER);
if (ObjectUtil.isEmpty(order)) {
return null;
}
List<OrderBy> orderByList = new ArrayList<>();
if (JsonUtil.isTypeJSONArray(order)) {
orderByList.addAll(JsonUtil.toList(order, OrderBy.class));
} else {
orderByList.add(JsonUtil.parse(order, OrderBy.class));
}
return orderByList;
}2、調(diào)用工具類
public List<SysOperLog> getList(SysOperLog operLog) {
LambdaQueryWrapper<SysOperLog> lambda = getLambda();
List<OrderItem> list = getOrderItems();
if (ObjectUtils.isNotEmpty(list)) {
MybatisPlusUtil.setOrderItem(lambda, list);
} else {
lambda.orderByDesc(SysOperLog::getOperTime);
}
return super.list(lambda);
}總結(jié)
到此這篇關(guān)于Java中LambdaQueryWrapper設(shè)置自定義排序的文章就介紹到這了,更多相關(guān)LambdaQueryWrapper設(shè)置自定義排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
原因分析IDEA導(dǎo)入Spring-kafka項(xiàng)目Gradle編譯失敗
這篇文章主要為大家介紹分析了IDEA導(dǎo)入Spring-kafka項(xiàng)目Gradle中編譯失敗原因及解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02
java從控制臺(tái)接收一個(gè)數(shù)字的實(shí)例詳解
這篇文章主要介紹了java從控制臺(tái)接收一個(gè)數(shù)字的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例代碼,注釋說(shuō)明清晰,需要的朋友可以參考下2017-07-07
Java集合中的CopyOnWriteArrayList使用詳解
這篇文章主要介紹了Java集合中的CopyOnWriteArrayList使用詳解,CopyOnWriteArrayList是ArrayList的線程安全版本,從他的名字可以推測(cè),CopyOnWriteArrayList是在有寫(xiě)操作的時(shí)候會(huì)copy一份數(shù)據(jù),然后寫(xiě)完再設(shè)置成新的數(shù)據(jù),需要的朋友可以參考下2023-12-12
SpringCloud?Feign實(shí)現(xiàn)微服務(wù)之間相互請(qǐng)求問(wèn)題
Feign是Netflix開(kāi)發(fā)的聲明式、模板化的HTTP客戶端,?Feign可以幫助我們更快捷、優(yōu)雅地實(shí)現(xiàn)微服務(wù)之間的調(diào)用,這篇文章主要介紹了SpringCloud?Feign實(shí)現(xiàn)微服務(wù)之間相互請(qǐng)求,需要的朋友可以參考下2022-06-06
Spring遠(yuǎn)程調(diào)用HttpClient/RestTemplate的方法
這篇文章主要介紹了Spring遠(yuǎn)程調(diào)用HttpClient/RestTemplate的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
java http連接池的實(shí)現(xiàn)方式(帶有失敗重試等高級(jí)功能)
這篇文章主要介紹了java http連接池的實(shí)現(xiàn)方式(帶有失敗重試等高級(jí)功能),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
maven打包上傳到私有倉(cāng)庫(kù)的實(shí)現(xiàn)步驟
這篇文章主要介紹了maven打包上傳到私有倉(cāng)庫(kù)的實(shí)現(xiàn)步驟,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01

