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è)置排序出錯:" + 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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Shiro中session超時頁面跳轉(zhuǎn)的處理方式
這篇文章主要介紹了Shiro中session超時頁面跳轉(zhuǎn)的處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06SpringBoot統(tǒng)計(jì)接口調(diào)用耗時的三種方式
在實(shí)際開發(fā)中,了解項(xiàng)目中接口的響應(yīng)時間是必不可少的事情,SpringBoot 項(xiàng)目支持監(jiān)聽接口的功能也不止一個,接下來我們分別以 AOP、ApplicationListener、Tomcat 三個方面去實(shí)現(xiàn)三種不同的監(jiān)聽接口響應(yīng)時間的操作,需要的朋友可以參考下2024-06-06實(shí)戰(zhàn)分布式醫(yī)療掛號通用模塊統(tǒng)一返回結(jié)果異常日志處理
這篇文章主要為大家介紹了實(shí)戰(zhàn)分布式醫(yī)療掛號系統(tǒng)之統(tǒng)一返回結(jié)果統(tǒng)一異常處理,統(tǒng)一日志處理到通用模塊示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-04-04Spring學(xué)習(xí)筆記3之消息隊(duì)列(rabbitmq)發(fā)送郵件功能
這篇文章主要介紹了Spring學(xué)習(xí)筆記3之消息隊(duì)列(rabbitmq)發(fā)送郵件功能的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07如何使用Resttemplate和Ribbon調(diào)用Eureka實(shí)現(xiàn)負(fù)載均衡
這篇文章主要介紹了如何使用Resttemplate和Ribbon調(diào)用Eureka實(shí)現(xiàn)負(fù)載均衡,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03Java?Kryo,Protostuff,Hessian序列化方式對比
這篇文章主要介紹了Java?Kryo,Protostuff,Hessian序列化方式對比,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-07-07Java輸入學(xué)號、姓名、年齡并對其進(jìn)行輸出的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于Java輸入學(xué)號、姓名、年齡并對其進(jìn)行輸出的實(shí)現(xiàn)方法,在計(jì)算機(jī)編程中,輸出學(xué)號和姓名是一個常見的任務(wù),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09Java利用MD5加鹽實(shí)現(xiàn)對密碼進(jìn)行加密處理
在開發(fā)的時候,有一些敏感信息是不能直接通過明白直接保存到數(shù)據(jù)庫的。最經(jīng)典的就是密碼了。如果直接把密碼以明文的形式入庫,不僅會泄露用戶的隱私,對系統(tǒng)也是極其的不厲。本文就來和大家介紹一下如何對密碼進(jìn)行加密處理,感興趣的可以了解一下2023-02-02