sobadstan 2024-12-03 21:49 采纳率: 28.6%
浏览 24

PageHelper失效

pageHelper没有完成分页(sql里没有被拼接上limit)

下面是service层

    @Override
    public PageResult pageQuery(ArticleConditionDto articleConditionDto) {
        PageHelper.startPage(articleConditionDto.getCurrentPage(),articleConditionDto.getPageSize());
        List<ArticleListVo> articleListVoList=articleMapper.pageQuery(articleConditionDto);
        articleListVoList.forEach(articleListVo -> {
            Long id = articleListVo.getId();
            Category category=categoryMapper.getCategoryById(id);
            articleListVo.setCategory(category);
            //根据文章id拿到所有标签id
            Long[] ids=articleTagMapper.selectByIdGetTagId(id);
            //根据标签id拿到所有标签名称
            List<Tags> tags=tagMapper.selectListById(ids);
            articleListVo.setTags(tags);
        });

        log.info("分页查询结果:{}",articleListVoList);
        return new PageResult(articleListVoList.size(),articleListVoList);
    }

下面是mapper层

    <select id="pageQuery" resultType="uno.stan.myblogBack.vo.ArticleListVo">
        SELECT DISTINCT a.*
        FROM article a
        JOIN article_tag at ON a.id = at.article_id
        <where>
            <if test="categoryId != null">
                AND categoryId = #{categoryId}
            </if>
            <if test="description != null and !description.isEmpty()">
                AND description LIKE CONCAT('%', #{description}, '%')
            </if>
            <if test="title != null and !title.isEmpty()">
                AND title LIKE CONCAT('%', #{title}, '%')
            </if>
            <if test="startTime != null and endTime != null">
                AND createdTime BETWEEN #{startTime} AND #{endTime}
            </if>
            <if test="tagIds != null and tagIds.size() > 0">
                AND at.tag_id IN
                <foreach item="tagId" index="index" collection="tagIds" open="(" separator="," close=")">
                    #{tagId}
                </foreach>
            </if>
        </where>
        order by a.created_time desc
    </select>

最后sql语句上面没有拼接上limit

img


请问是为什么呢 下面是依赖版本

img


img


img

  • 写回答

3条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从你给出的代码和描述来看,PageHelper分页插件似乎没有在你的代码里正确生效。根据你给出的代码,这可能是由以下几个原因导致的:

    1. SQL执行顺序问题:你的SQL查询是在mapper层执行的,而PageHelper的startPage方法应该在查询之前调用。然而在你的代码中,startPage是在service层调用的,且查询语句是异步执行的。如果startPage没有在数据库查询开始之前被调用,那么分页功能可能就不会生效。你应该尝试将startPage方法移动到mapper层调用。
    2. 事务管理问题:如果你在service层使用了事务管理,那么PageHelper的分页功能可能会受到影响。因为事务管理可能会改变SQL的执行顺序或者影响PageHelper的插件行为。你可以尝试将分页逻辑放在事务管理之外执行。
    3. 依赖冲突或版本问题:从你给出的依赖图来看,你在项目中同时使用了MyBatis Plus和PageHelper。这两个插件可能会存在依赖冲突或者版本兼容性问题。你可以尝试升级或者降级这两个插件的版本,或者检查是否存在依赖冲突的问题。同时确保你的Spring Boot版本与这两个插件兼容。
    4. 数据库连接问题:你的日志中显示了一些关于JDBC连接的信息,但并没有明确的错误信息。你可以检查数据库连接是否正常,以及是否正确地配置了数据库连接参数。如果数据库连接有问题,可能会影响分页功能的执行。

    为了解决这个问题,你可以尝试以下步骤:

    • 确保PageHelper的startPage方法在数据库查询之前被调用。
    • 检查事务管理的使用是否正确,避免在事务管理中执行分页逻辑。
    • 检查依赖是否存在冲突或版本兼容性问题。
    • 检查数据库连接是否正常,并确认数据库连接参数配置正确。

    如果以上步骤都无法解决问题,你可能需要进一步检查你的代码和配置,或者考虑使用其他分页插件或方法来实现分页功能。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月3日