springboot多个数据进行分页怎么写
时间: 2023-12-14 09:37:59 浏览: 113
Spring Boot 支持多数据源,可以通过配置不同的数据源来实现多个数据库的访问。下面是一个简单的实现:
1. 配置多个数据源
在 `application.properties` 文件中配置多个数据源,例如:
```
# 第一个数据源
spring.datasource.url=jdbc:mysql://localhost:3306/db1
spring.datasource.username=user1
spring.datasource.password=pass1
# 第二个数据源
datasource2.url=jdbc:mysql://localhost:3306/db2
datasource2.username=user2
datasource2.password=pass2
```
2. 配置多个 JdbcTemplate
在 Spring Boot 中,可以使用 `JdbcTemplate` 来操作数据库。因此,我们需要配置多个 `JdbcTemplate` 实例,分别对应不同的数据源。例如:
```java
@Configuration
public class DataSourceConfig {
@Bean(name = "dataSource1")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource1() {
return DataSourceBuilder.create().build();
}
@Bean(name = "dataSource2")
@ConfigurationProperties(prefix = "datasource2")
public DataSource dataSource2() {
return DataSourceBuilder.create().build();
}
@Bean(name = "jdbcTemplate1")
public JdbcTemplate jdbcTemplate1(@Qualifier("dataSource1") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean(name = "jdbcTemplate2")
public JdbcTemplate jdbcTemplate2(@Qualifier("dataSource2") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
```
3. 实现分页查询
假设我们要对两个数据源中的同一个表进行分页查询,可以按照以下步骤实现:
- 在实体类中定义查询条件和分页参数
```java
public class UserQuery {
private String name;
private int pageNo;
private int pageSize;
// 省略 getter 和 setter 方法
}
```
- 在 DAO 层中使用 JdbcTemplate 进行查询
```java
@Repository
public class UserDao {
@Autowired
@Qualifier("jdbcTemplate1")
private JdbcTemplate jdbcTemplate1;
@Autowired
@Qualifier("jdbcTemplate2")
private JdbcTemplate jdbcTemplate2;
public List<User> queryUsers(UserQuery query) {
int offset = (query.getPageNo() - 1) * query.getPageSize();
int limit = query.getPageSize();
String sql = "SELECT * FROM user WHERE name LIKE ? LIMIT ?, ?";
List<User> users1 = jdbcTemplate1.query(sql, new Object[]{"%" + query.getName() + "%", offset, limit}, new BeanPropertyRowMapper<>(User.class));
List<User> users2 = jdbcTemplate2.query(sql, new Object[]{"%" + query.getName() + "%", offset, limit}, new BeanPropertyRowMapper<>(User.class));
List<User> result = new ArrayList<>();
result.addAll(users1);
result.addAll(users2);
return result;
}
}
```
在上述代码中,我们使用了 `@Autowired` 和 `@Qualifier` 注解来注入不同的 `JdbcTemplate` 实例。然后,我们可以使用 `query` 方法对两个数据源中的表进行分页查询,最后将结果合并返回。
注意事项:
- 在 SQL 语句中需要使用 LIMIT 语句进行分页。
- 不同的数据源需要使用不同的 `JdbcTemplate` 实例,否则会出现错误。
阅读全文