在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
# 添加其他配置
这里配置了两个数据源(ds1
和ds2
),并分别设置了URL、用户名、密码和驱动类。另外,spring.datasource.druid.one.enabled
和spring.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的多数据源和分页功能。借助这些工具,我们可以轻松地进行多数据源配置,并对查询结果进行分页处理。
你可以根据实际需求,对以上代码进行修改和优化,以适应具体的业务场景。希望本文对你有所帮助,谢谢阅读!
参考文档:
本文来自极简博客,作者:魔法少女酱,转载请注明原文链接:SpringBoot MyBatis Druid PageHelper 实现多数据源并分页