QueryDSL+JPA查询中动态构建orderBy排序

此方法返回的OrderSpecifier<?>对象可以直接用在JPAQuery<?>中的.orderBy(orderSpecifier)方法。(已包含包路径)
参数EntityPathBase就是QueryDSL生成的Qxxxx类的对象。

/**
     * 自定义分页时的排序字段
     *
     * @param pathBase
     * @param pageOrder
     * @param <T>
     * @return
     */
    public static <T> OrderSpecifier<?> getSortedColumn(EntityPathBase<T> pathBase, PageOrder pageOrder) {
        String sort = pageOrder.getSortType();
        String field = pageOrder.getSortName();
        if (org.apache.commons.lang3.StringUtils.isAnyBlank(sort, field)) {
            sort = "desc";
            field = "createTime";
        }
        com.querydsl.core.types.Order order = "asc".equalsIgnoreCase(sort) ? Order.ASC : Order.DESC;
        com.querydsl.core.types.Path<Object> fieldPath = com.querydsl.core.types.dsl.Expressions.path(Object.class, pathBase, field);
        return new com.querydsl.core.types.OrderSpecifier(order, fieldPath);
    }
@Data
public class PageOrder {
    private int page;
    private int size;
    private String sortType;
    private String sortName;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QueryDSL JPA 是一个强大的查询框架,它提供了一种类型安全的查询语法,可以用于编写简洁、可维护性高的 JPA 查询代码。 使用 QueryDSL JPA,你可以通过编写 Java 代码来构建查询,而不是使用传统的字符串拼接方式。这样可以避免常见的拼写错误和类型错误,并且在编译期间就能检测到问题。 要使用 QueryDSL JPA,首先需要在项目添加相应的依赖。然后,你可以使用 QueryDSL 的 API 来构建查询表达式,并执行查询操作。它支持诸如过滤、排序、分页等常见的查询操作。 以下是一个使用 QueryDSL JPA 进行查询的示例: ```java QUser user = QUser.user; JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager); List<User> users = queryFactory.selectFrom(user) .where(user.age.between(20, 30)) .orderBy(user.name.asc()) .fetch(); for (User user : users) { System.out.println(user.getName()); } ``` 在上面的示例,我们创建了一个 `QUser` 对象来表示实体类 `User`,然后使用 `JPAQueryFactory` 创建一个查询工厂。通过调用工厂的 `selectFrom` 方法来指定查询的实体类,然后可以链式调用其他方法来添加查询条件和排序规则。最后,通过 `fetch` 方法执行查询,并获取查询结果。 除了基本的查询操作,QueryDSL JPA 还提供了丰富的功能,如关联查询、子查询、聚合函数等。你可以根据具体的需求,灵活地使用 QueryDSL JPA 来编写复杂的查询代码。 请注意,以上示例的代码只是一个简单的演示,实际使用时需要根据你的实体类和数据库模型进行相应的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值