如何解决Spring Boot使用单个调用获取多个ID的数据库数据
在spring boot项目中,我有以下代码,由于在循环内发生多个数据库调用,因此会导致性能降低。
userList.forEach(user -> {
List<Project> userProjectsList = ProjectRepository.findByUser_UserIdOrderByDatecompletedDesc(user.getUserId());
}
注意:userList是从存储过程返回的列表。 项目是一个实体。该实体的相关存储库为ProjectRepository。 用户也是实体。 项目和用户实体具有多对一关系。
项目实体如下所示;
@Entity
@Table(name = "Project")
public class Project {
@Id
@GeneratedValue
private Integer projectid;
private Calendar datecompleted;
@ManyToOne
@JoinColumn(name = "userid",referencedColumnName = "userid")
private User user;
// getters and setters
}
我需要修改此代码以提高效率。作为解决方案,我计划从数据库中一次一次获取属于所有用户的所有项目。 (正在使用MysqL数据库)
我尝试了以下代码,但似乎不正确。
List<Integer> userIdList = UserList.stream().map(User::getUserId).collect(Collectors.toList());
List<List<Project>> userProjectsList = ProjectRepository.findByUser_UserIdInorderByDatecompletedDesc(userIdList);
以下方法在ProjectRepository中。
List<List<Project>> findByUser_UserIdInorderByDatecompletedDesc(List<Integer> userIdList);
更新:
以上代码未返回正确的结果。我传递了2个userIds。其中一个用户有2个项目,另一个用户有1个项目。 预期结果是:
[0]->[0]:project1,[1]:project2
[1]->[0]:project3
但是,返回的结果是:
[0]->[0]:project1
[1]->[0]:project2
[2]->[0]:project3
解决方法
您可以使用IN
查询。您需要声明您的方法签名,如下所示:
findByNamesIn(Collection<String> names);
有关更多详细信息和其他查询,请参见https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。