sptingBoot+mybatis通过多线程快速查询mysql的百万数据demo代码
时间: 2023-12-27 10:02:37 浏览: 127
Spring+MyBatis多数据源配置实现示例
下面是一个基于 Spring Boot 和 MyBatis 实现多线程查询 MySQL 百万数据量的示例代码:
```java
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
@Autowired
private ThreadPoolTaskExecutor taskExecutor;
public List<User> getUsers() throws InterruptedException, ExecutionException {
int threadCount = 10;
int pageSize = 1000;
List<Future<List<User>>> futures = new ArrayList<>();
for (int i = 0; i < threadCount; i++) {
final int offset = i * pageSize;
Future<List<User>> future = taskExecutor.submit(() -> {
return userMapper.getUsers(offset, pageSize);
});
futures.add(future);
}
List<User> result = new ArrayList<>();
for (Future<List<User>> future : futures) {
result.addAll(future.get());
}
return result;
}
}
@Repository
public interface UserMapper {
List<User> getUsers(@Param("offset") int offset, @Param("pageSize") int pageSize);
}
```
在上面的示例代码中,我们通过 `ThreadPoolTaskExecutor` 来创建线程池,使用 `submit()` 方法提交多个查询任务,每个任务通过 `UserMapper` 的 `getUsers()` 方法查询指定页码和每页数量的用户数据,并将查询结果存储在 `List<User>` 中。最后,我们将所有线程的查询结果合并为一个最终的结果集。
注意在这个示例代码中,我们使用了 `@Param` 注解来指定 MyBatis mapper 方法的参数名称,这样可以避免在 SQL 语句中使用 `#{0}`、`#{1}` 等方式来指定参数位置。
阅读全文