spring boot 项目关于使用EntityManager.createNativeQuery()做分页查询

该代码段展示了如何在Java中手动构建和执行SQL查询以实现分页。首先,它校验输入的SQL语句,然后拼接where条件。接着,使用EntityManager从数据库获取数据总数和实际数据,设置分页信息并封装查询结果到PageImpl对象中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、分页逻辑

需要手动去拼装 数据总量统计sql,数据查询sql

需要将分页信息进行封装。

@PersistenceContext
private EntityManager entityManager;

public static Page getPageDate(String selectSql, String countSql, String whereSql, int page, int size,Class clazz){
        //1、校验参数
        if (StringUtils.isBlank(selectSql) || StringUtils.isBlank(countSql)) {
            log.info("参数校验失败,参数{}{}为必填项", "selectSql", "countSql");
            return null;
        }

        if (StringUtils.isNotBlank(whereSql)) {
            countSql = countSql + whereSql;
            log.info("执行sql >>>>>> {},获取数据总数", countSql);
            selectSql = selectSql + whereSql;
            log.info("执行sql >>>>>> {},获取数据", selectSql);
            log.info(selectSql);
        }

        //2、数据查询逻辑
        try{
            

            //清除缓存,防止缓存与数据库数据不一致问题
            entityManagerPrimary.clear();

            //获取数据总数
            Query countQuery = entityManagerPrimary.createNativeQuery(countSql);
            BigInteger totalCount = (BigInteger)countQuery.getSingleResult();

            //查询数据
            Query query = entityManagerPrimary.createNativeQuery(selectSql, clazz);
            
            //设置分页信息
            Pageable pageable = new PageRequest(page - 1, size);
            query.setFirstResult(pageable.getOffset());
            query.setMaxResults(pageable.getPageSize());
            List resultList = query.getResultList();

            //查询结果封装
            Page data = new PageImpl<>(resultList, pageable, totalCount.longValue());
            return data;
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值