MyBatisPlus多表分页查询

本文通过一个实际案例展示了如何在MyBatis-Plus框架下,利用多表连接进行分页查询,以部门ID筛选用户数据,包括数据库初始化、工程搭建、实体类定义、分页接口和服务实现以及测试部分。
摘要由CSDN通过智能技术生成

用一个非常简单的案例,来演示mp的多表分页查询过程。一张用户表里面的sys_code字段,存储的是部门表的code字段值,要根据部门id筛选出对应的用户数据。

一 初始化数据库

CREATE TABLE sys_user(
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(20) UNIQUE,
    hobby VARCHAR(20),
    sys_code VARCHAR(20)
);
INSERT INTO sys_user VALUES
(NULL, '王一博', '搬砖1', 'bz'),
(NULL, '王二博', '搬砖2', 'bz'),
(NULL, '王三博', '代码1', 'dm'),
(NULL, '王四博', '代码2', 'dm'),
(NULL, '王五博', '搬砖3', 'bz'),
(NULL, '王六博', '搬砖4', 'bz'),
(NULL, '王七博', '搬砖5', 'bz'),
(NULL, '王八博', '搬砖6', 'bz'),
(NULL, '王九博', '搬砖7', 'bz'),
(NULL, '王十博', '搬砖8', 'bz'),
(NULL, '王十一', '搬砖9', 'bz'),
(NULL, '王十二', '搬砖10', 'bz'),
(NULL, '王十三', '搬砖11', 'bz'),
(NULL, '王十四', '搬砖12', 'bz');
CREATE TABLE sys_depart(
    id INT,
    NAME VARCHAR(20),
    CODE VARCHAR(20)
);
INSERT INTO sys_depart VALUES
(10086, '财务部', 'bz'),
(20001, '研发部', 'dm')

二 搭建简单工程

2.1 pom文件

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.3</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>

2.2 yml文件

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mango
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2.3 配置MyBatisPlus分页插件

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MPConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

2.4 启动类

@SpringBootApplication
public class MangoApplication {
    public static void main(String[] args) {
        SpringApplication.run(MangoApplication.class, args);
    }
}

三 业务代码

3.1 实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("sys_user")
public class User {
    @TableId
    private int id;
    private String username;
    private String hobby;
    private String sysCode;
}

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("sys_depart")
public class Depart {
    @TableId
    private int id;
    private String name;
    private String code;
}

3.2 分页代码

public interface UserService extends IService<User> {
    IPage<User> listByDepartId(Page<User> page, int departId);
}

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    public IPage<User> listByDepartId(Page<User> page, int departId) {
        return userMapper.listByDepartId(page, departId);
    }

}


@Mapper
public interface UserMapper extends BaseMapper<User> {
    @Select("SELECT u.* FROM sys_user u LEFT JOIN sys_depart d ON u.sys_code = d.code WHERE d.id = #{departId}")
    IPage<User> listByDepartId(Page<User> page, int departId);
}

3.3 分页功能测试

@SpringBootTest
@RunWith(SpringRunner.class)
public class UserTest {
    @Autowired
    private UserService userService;
    @Test
    public void test1() {
        Page<User> page = new Page<>(1, 10);
        IPage<User> userIPage = userService.listByDepartId(page, 10086);
        for (User user : userIPage.getRecords()) {
            System.out.println("筛选出来的数据: " + user);
        }
    }
}

以上只是MyBatis-Plus多表分页查询功能的简单演示,大家可以试着执行一下代码,sql查询语句可以使用@Select注解,也可以使用mapper映射文件。MyBatis-Plus的分页功能,一定要配置分页插件,一定要配置分页插件,其他的就是大家熟悉的MyBatis的内容了,大家也可以尝试着一些逻辑复杂的功能,试着完成一下。

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于MyBatis-Plus的多表分页查询,可以按照以下步骤进行操作: 1. 首先,新建一个MybatisPlusConfig配置类文件,该文件用于配置MyBatis-Plus的相关配置。 2. 接下来,创建一个分页类,该类用于封装分页查询的参数,包括页码、每页记录数等信息。 3. 根据业务需要,组装查询构造器。可以使用MyBatis-Plus提供的QueryWrapper类来构建查询条件,根据需要使用不同的查询操作符,如全值匹配、模糊匹配、大于等于、小于等于等。示例中使用了switch语句来判断不同的操作符,并根据操作符调用相应的方法构建查询条件。 4. 编写ServeImpl,该类用于处理业务逻辑,包括调用Mapper接口进行数据库查询操作,并使用分页类来进行分页查询。 5. 最后,编写mapper.xml文件,定义SQL语句,包括多表联合查询的SQL语句,并将查询结果映射到Java对象中。 通过以上步骤,就可以实现MyBatis-Plus的多表分页查询功能。具体的实现过程可以根据实际需求进行调整和扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MyBatis-Plus多表联合查询并且分页(3表联合)](https://download.csdn.net/download/weixin_38685173/12742340)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [MybatisPlus多表分页查询](https://blog.csdn.net/weixin_37777574/article/details/122973311)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值