使用 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