Spring Data Jpa多条件查询及分页

        今天项目中需要用到多个条件关联查询,用jpa原生的查询方式实现起来就比较繁琐,但是jpa中提供了entityManger这个类可以实现自定义的sql查询这样我们就可以书写原生sql从而实现多条件的查询了实现方式也比较简单

1.注入entityManger实体类

 @Autowired
 private EntityManager entityManager;

2.调用entityManger.createNativeQuery()方法实现查询,在实现分页的过程中需要用org.springframework.data.domain.PageImpl;这个类他是page对象的实现类,在调用时会发现我们传入的pageable参数没有作用,那是因为pageable对象无法对我们已经查询出来的集合进行分页操作所以需要我们手动实现他的分页方法。

代码示例:

public Page<StutsDk> execQuerySqlPage(Pageable pageable, String sql) {

        Query query = this.entityManager.createNativeQuery(sql,StutsDk.class);

        List<StutsDk> stutsDks=query.getResultList();
        if (pageable.getOffset() > stutsDks.size()) {
            long total = 0L;
            PageImpl<StutsDk> page = new PageImpl<>(stutsDks,pageable,total);
            return page;
        }
        if (pageable.getOffset() <= stutsDks.size() && pageable.getOffset() + pageable.getPageSize() > stutsDks.size()) {
            List<StutsDk> bizPojos = stutsDks.subList(pageable.getOffset(), stutsDks.size());
            PageImpl<StutsDk> page = new PageImpl<>(bizPojos, pageable, stutsDks.size());
            return page;
        }
        List<StutsDk> newStutsDks = stutsDks.subList(pageable.getOffset(), pageable.getOffset() + pageable.getPageSize());
        PageImpl<StutsDk> page = new PageImpl<StutsDk>(newStutsDks, pageable, stutsDks.size());
        return page;
    }

          调用createNativeQuery()方法时如果不写实体类的映射返回的会是list<Object>集合我们也可以调用query查询对象中的query.unwrap()方法将其转换为list<Map<,>>集合。

以上代码快中所调用的pageable的两个方法

pageable.getOffset()

pageable.getPageSize()

分别为获取数据的偏移量和和要返回的数据行数

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值