SpringBoot MyBatis Druid PageHelper 实现多数据源并分页

魔法少女酱 2024-06-19 ⋅ 20 阅读

在Spring Boot开发中,我们常常需要使用到多数据源,并且需要对查询结果进行分页处理。本文将介绍如何借助Spring Boot、MyBatis、Druid和PageHelper来实现多数据源并进行分页操作。

1. 引入依赖

pom.xml文件中添加以下依赖:

<dependencies>
    <!-- Spring Boot -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <!-- MyBatis -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
    </dependency>

    <!-- Druid -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.2.4</version>
    </dependency>

    <!-- PageHelper -->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.2.12</version>
    </dependency>
    
    <!-- 添加其他依赖 -->

</dependencies>

这里使用了Spring Boot、MyBatis、Druid和PageHelper等依赖,可以根据实际需求添加其他依赖。

2. 配置数据源

application.properties文件中配置多个数据源,以及Druid的相关配置:

# 数据源1
spring.datasource.ds1.url=jdbc:mysql://localhost:3306/db1
spring.datasource.ds1.username=username1
spring.datasource.ds1.password=password1
spring.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver

# 数据源2
spring.datasource.ds2.url=jdbc:mysql://localhost:3306/db2
spring.datasource.ds2.username=username2
spring.datasource.ds2.password=password2
spring.datasource.ds2.driver-class-name=com.mysql.jdbc.Driver

# Druid配置
spring.datasource.druid.one.enabled=true
spring.datasource.druid.two.enabled=true

# 添加其他配置

这里配置了两个数据源(ds1ds2),并分别设置了URL、用户名、密码和驱动类。另外,spring.datasource.druid.one.enabledspring.datasource.druid.two.enabled分别启用了Druid的监控页面。

3. 配置MyBatis

创建一个MyBatisConfig类,用于配置MyBatis的相关参数:

@Configuration
@MapperScan(basePackages = "com.example.demo.mapper.ds1", sqlSessionTemplateRef = "ds1SqlSessionTemplate")
public class MyBatisConfig1 {

    @Bean(name = "ds1DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.ds1")
    public DataSource ds1DataSource() {
        return DruidDataSourceBuilder.create().build();
    }

    @Bean(name = "ds1SqlSessionFactory")
    public SqlSessionFactory ds1SqlSessionFactory(@Qualifier("ds1DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean.getObject();
    }

    @Bean(name = "ds1SqlSessionTemplate")
    public SqlSessionTemplate ds1SqlSessionTemplate(@Qualifier("ds1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

这里使用了@MapperScan注解指定了Mapper接口的位置,使用@ConfigurationProperties注解绑定了ds1数据源的配置。配置中的@Bean注解用于将数据源、SqlSessionFactory和SqlSessionTemplate等对象注入到容器中。

类似地,可以创建一个MyBatisConfig2类来配置ds2数据源。

4. 使用PageHelper实现分页

在需要进行分页操作的Mapper接口中添加PageHelper支持:

public interface UserMapper {

    @Select("SELECT * FROM user")
    List<User> getUsers();

    @Select("SELECT * FROM user")
    void getUsersWithPage();

}

在查询数据库之前,调用PageHelper.startPage(pageNum, pageSize)方法来设置分页参数。同时,可以使用List<User>Page<User>来接收查询结果,根据需要选择合适的方式。

5. 测试

编写一个简单的Controller类来测试多数据源和分页功能:

@RestController
public class UserController {

    @Autowired
    private UserMapper userMapper;

    @GetMapping("/users")
    public List<User> getUsers() {
        PageHelper.startPage(1, 10);
        return userMapper.getUsers();
    }

    @GetMapping("/users-with-page")
    public PageInfo<User> getUsersWithPage() {
        PageHelper.startPage(1, 10);
        List<User> users = userMapper.getUsers();
        return new PageInfo<>(users);
    }

}

getUsers()方法使用List<User>接收查询结果,不带分页;getUsersWithPage()方法使用PageInfo<User>类封装查询结果,并携带分页信息。

6. 结束语

至此,我们已经成功实现了Spring Boot、MyBatis、Druid和PageHelper的多数据源和分页功能。借助这些工具,我们可以轻松地进行多数据源配置,并对查询结果进行分页处理。

你可以根据实际需求,对以上代码进行修改和优化,以适应具体的业务场景。希望本文对你有所帮助,谢谢阅读!

参考文档:


全部评论: 0

    我有话说: