使用 Spring Boot 重新创建 Twitter 涉及的问题

Posted

技术标签:

【中文标题】使用 Spring Boot 重新创建 Twitter 涉及的问题【英文标题】:Problems involved in Re-creating twitter using Spring Boot 【发布时间】:2018-10-21 08:39:10 【问题描述】:

我又来了

关于 JpaRepository 的快速问题

我正在使用 Spring boot 和 Hibernate 开发 Twitter 的镜像项目。我已经完成了 Twitter 的大部分功能的创建——发帖、转发、评论等。现在我正在努力使这个网络应用更加用户友好,特别是在应用从数据库加载帖子的方式方面。

目前,我的应用程序是这样工作的:每次用户登录时,系统都会从他/她的“关注列表”中加载所有帖子,这不好,因为如果这个用户关注数百人,可能会有数十人成千上万的帖子同时加载——这不仅对服务器构成了巨大的负担,而且还耗费了用户的耐心。

所以我想切换到另一种加载帖子的方式。目前,我有这个想法:

每次用户登录系统时,都会有一个“lastLoginTime”,用@LastModifiedTime 创建。每次有人发布内容时,都会使用@CreatedTime 创建一个“postTime”。每次用户登录系统时,服务器都会加载上次登录时间前不超过 24 小时发布的帖子。

更具体一点。假设我在上午 8:00 登录系统。系统应该加载昨天上午 8:00 之后发布的帖子。

因为我使用的是 JpaRepository。我打算使用@Query 来注释该方法。但我只是想不出一种可能的方法来编写一个好的 JPQL 来实现这个目标。有人可以帮我吗?我已经完成了 lastLoginTime 和 postTime 的创建——顺便说一句。

提前致谢 真诚的

'

【问题讨论】:

有什么想法吗?挣扎 【参考方案1】:

遗憾的是,Hibernate 没有很多日期功能。因此,您需要尝试调用数据库的本机 DATE 函数来执行此操作。另一种选择是始终保存在一个新列中,其中包含原始发布日期之前一天的发布日期信息。

使用新列,您可以:

SELECT post FROM Post post 
WHERE post.postTimeToLoad >= 
    (SELECT user.lastLoginTime FROM User user WHERE user.id = :idLoggerUser)

如果您可以使用数据库中的本机函数,请参见使用 DATE_SUB 函数的 mysql 示例:

SELECT post FROM Post post 
WHERE DATE(DATE_SUB(post.postTime, INTERVAL 1 DAY)) >= 
    (SELECT user.lastLoginTime FROM User user WHERE user.id = :idLoggerUser)

【讨论】:

以上是关于使用 Spring Boot 重新创建 Twitter 涉及的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 Gson/Jackson 和 Spring Boot 重新创建没有字段属性的 DTO 类,而不是使其为空

如何在spring boot中的每个测试类之后销毁和重新创建bean

spring-boot重新学习

SPRING BOOT 手动 War 文件部署到 Tomcat 并重新启动服务器,不创建数据库

Spring Boot ddl 自动生成器

使用 H2 数据库自动创建的 Spring Boot