springboot+mybatis按条件分页查询多张表的项目实践

 更新时间:2025年09月05日 10:23:25   作者:abcnull  
针对MySQL中多表分页查询需求,推荐使用JOIN进行多表关联,结合PageHelper分页插件,通过MySQL resultMap和JOIN语句实现高效查询,感兴趣的可以了解一下

背景

假如同 mysql 数据源下有如下几张表:

  • 用户基础信息表
  • 用户地址表
  • 用户学历信息表

我希望做分页查询用户数据,用户数据为各个表内信息的汇总,并且这个分页查询会根据各种条件来查询

那么通常该如何做呢?

方案推荐

一般情况下通用推荐(下面主讲):
使用 join 进行多表连接查询,使用 pagehelper 分页插件,通过 MyBatis 的 <resultMap> 和 JOIN 语句实现多表关联,使用 MyBatis 动态 SQL 标签(如 )处理条件组合

其他方案:

  • 方式一:将高频查询字段冗余到主表,形成宽表,此方案牺牲空间换取性能,以后直接分页查询一张表即可
  • 方式二:分步骤来查询,在代码层面进行数据组装

创建 DTO

创建 dto 做查询数据接收的对象

public class UserQueryDTO {
    private String name;        // 用户姓名(模糊查询)
    private String province;    // 省份条件 
    private String degree;      // 学历条件 
}

创建 Mapper

创建一个 mapper 接口 selectUserWithConditions

创建对应 xml

<!-- UserMapper.xml  -->
<select id="selectUserWithConditions" resultMap="UserResultMap">
    SELECT u.id,  u.name,  a.province,  e.degree  
    FROM user u 
    LEFT JOIN address a ON u.id  = a.user_id  
    LEFT JOIN education e ON u.id  = e.user_id  
    <where>
        <if test="name != null and name != ''">
            u.name  LIKE CONCAT('%', #{name}, '%')
        </if>
        <if test="province != null and province != ''">
            AND a.province  = #{province}
        </if>
        <if test="degree != null and degree != ''">
            AND e.degree  = #{degree}
        </if>
    </where>
</select>
 
<resultMap id="UserResultMap" type="UserVO">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="province" column="province"/>
    <result property="degree" column="degree"/>
</resultMap>

Service 代码

// 使用PageHelper(需在pom.xml 添加依赖)
public PageInfo<UserVO> queryUsers(UserQueryDTO dto) {
    PageHelper.startPage(dto.getPageNum(),  dto.getPageSize()); 
    List<UserVO> list = userMapper.selectUserWithConditions(dto); 
    return new PageInfo<>(list);
}

到此这篇关于springboot+mybatis按条件分页查询多张表的项目实践的文章就介绍到这了,更多相关springboot mybatis 条件多表分页查询 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 解读thymeleaf模板引擎中th:if的使用

    解读thymeleaf模板引擎中th:if的使用

    这篇文章主要介绍了解读thymeleaf模板引擎中th:if的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Spring编程式和声明式事务实例讲解小结

    Spring编程式和声明式事务实例讲解小结

    这篇文章主要介绍了Spring编程式和声明式事务实例讲解小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 一文详解MVCC的执行原理

    一文详解MVCC的执行原理

    MVCC是一种并发控制机制,用于解决数据库并发访问中,数据一致性问题,它通过在读写操作期间保存多个数据版本,以提供并发事务间的隔离性,本文将和大家简单聊聊MVCC的执行原理,需要的朋友可以参考下
    2023-12-12
  • Spring boot实现一个简单的ioc(1)

    Spring boot实现一个简单的ioc(1)

    这篇文章主要为大家详细介绍了Spring boot实现一个简单的ioc,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Java多线程实现之Callable详解

    Java多线程实现之Callable详解

    这篇文章主要介绍了Java多线程实现之Callable详解,Callable是一个接口,用于实现多线程,与实现Runnable类似,但是功能更强大,通过实现Callable接口,我们需要重写call()方法,该方法可以在任务结束后提供一个返回值,需要的朋友可以参考下
    2023-08-08
  • java 下执行mysql 批量插入的几种方法及用时

    java 下执行mysql 批量插入的几种方法及用时

    java 下执行mysql 批量插入的几种方法及用时,1000次插入方法的比较。
    2013-04-04
  • Ribbon负载均衡服务调用的示例详解

    Ribbon负载均衡服务调用的示例详解

    Rbbo其实就是一个软负载均衡的客户端组件,他可以和其他所需请求的客户端结合使用,这篇文章主要介绍了Ribbon负载均衡服务调用案例代码,需要的朋友可以参考下
    2023-01-01
  • java多态机制原理特点详解

    java多态机制原理特点详解

    在本篇文章里小编给大家分享的是关于java多态机制原理特点详解,有需要的朋友们可以跟着学习下。
    2020-02-02
  • Spring FactoriesLoader机制实例详解

    Spring FactoriesLoader机制实例详解

    这篇文章主要介绍了Spring FactoriesLoader机制实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • SpringBoot内置数据源的持久化与解决方案

    SpringBoot内置数据源的持久化与解决方案

    数据源的配置 我们先基于SpringBoot默认的HikariDataSource数据源,导入JDBC场景,看看SpringBoot帮我们自动配置了什么,下面我们来了解SpringBoot内置数据源持久化
    2022-07-07

最新评论