Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
发布日期:2021-05-14 13:06:14 浏览次数:26 分类:精选文章

本文共 1832 字,大约阅读时间需要 6 分钟。

最近在一个项目中使用Mybatis时,我遇到了动态分页查询的棘手问题。经过一些研究和调试,最终解决了这个问题,让我和大家分享我的经验吧。

问题背景

在这个项目中,我们需要实现动态分页查询房屋信息。动态分页意味着我们需要知道数据库中的总记录数,这样才能计算出分页的总页数和当前页数。查找过程中,我遇到了两个关键问题:

  • 分页工具类定义错误

    最初,我定义了一个基础的Page类来处理分页逻辑。但是在后续实现过程中,我错误地将Page类的全限定名写成了"page",导致映射到实体类时出现相互干扰。这个错误让我陷入了迷宫般的困惑,直到我仔细检查了反射异常的日志才发现了真相。

  • 参数映射类型错误

    在Mapper.xml中,我将参数映射类型填写成了"hashmap",这是正确的,因为我们通过传递一个参数 HashMap 来实现动态conditions。但因为Page类的全限定名错误,某些字段无法正确映射到相应的属性,导致查询结果一片空白。

  • 动态查询总记录数的实现

    为了计算总记录数,我编写了一个表存存的方法。在Mybatis配置文件中,我创建了如下的XML节点:

    这个查询根据提供的HouseCondition参数计算满足条件的记录总数。为了实现这一点,我还写了一个对应的DAO接口和实现类:

    public int reCount(HouseCondition housec) {
    Session session = MybatisUtil.getSession();
    Integer count = (Integer) session.selectOne("houseDao.reCount", housec);
    return count;
    }

    分页查询的实现细节

    分页查询的主要逻辑集中在Page工具类和对应的Mapper.xml文件中。Page类主要负责处理分页参数的转换,比如计算起始行数和结束行数,并提供常用方法如 getTotalPageCount()等。

    在Mapper.xml中,我定义了以下 SQL 语句来处理分页查询:

    这个查询使用了正确的参数类型和来自分页工具类的参数来实现动态分页。

    调试与解决问题

    在编写好所有配置和代码后,我进行了多次测试。但每次运行时,页面信息无法正常显示,数据库查询结果全是空值。经过仔细检查,我发现在Page工具类中,我错误地将Page定义为全限定名,导致Mybatis无法正确映射结果集。

    最终解决方案

    经过反复调试,我意识到问题出在Page工具类的全限定名和Mapper文件中的语句参数类型。我纠正了Page工具类中的全限定名错误,并确保所有参数类型正确无误。

    结果展示

    经过修正后,我运行测试类单元测试,结果显示数据库中的34条记录被正确分页返回。页面信息、总记录数、总页数等都能正常显示。

    这个过程教会我,开发过程中即便代码看起来没问题,但细节错误同样不可忽视。有时候,反射异常的日志是解决问题的关键。同时,注重代码的细节配置,如参数映射类型和全限定名的正确性,是确保系统正常运行的重要因素。

    希望以上经验能对你有所帮助,在后续的Mybatis开发中,记得注意细节,保持代码的简洁和规范。

    上一篇:Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)
    下一篇:mybatis关联配置(一对多配置)

    发表评论

    最新留言

    感谢大佬
    [***.8.128.20]2025年04月19日 22时12分54秒