【问题标题】:Remove blank spaces (trim) in result retrieved using JpaRepository删除使用 JpaRepository 检索的结果中的空格(修剪)
【发布时间】:2016-02-10 10:34:03
【问题描述】:

Repository 类是:

public interface CategoryRepository extends JpaRepository<Category,Integer> {
}

服务类是:

@Service
public class CategoriesService {

    @Autowired
    CategoryRepository repo;

    public Iterable<Category> findAll(){
        return repo.findAll();
    }
}

然后我使用service.findAll() 来检索结果 ArrayList。它给了我正确的结果,但由于数据库中的值包含空格。那么如何在 ArrayList 中删除结果中的空格。(不迭代结果 arrayList 并修改)

已编辑 问题是,在我们在服务类中获得 arrayList 之前,我们无法访问各个数据元素。

【问题讨论】:

  • 您的意思是修剪结果中的前导和尾随空格或删除包含空格的结果
  • 你的意思是我评论中的第一个或第二个
  • @vineethsivan ,抱歉,这是第一个。问题是,在我们在服务类中获得 arrayList 之前,我们无法访问各个数据。
  • 如果不迭代列表,我认为您无法实现这一目标。

标签: java jpa spring-boot


【解决方案1】:

那么我怎样才能删除 ArrayList 中结果中的空白。(不迭代结果 arrayList 和修改)

一种方法是修改您的查询并获得不带前导或尾随空格的正确结果集。您可以使用LTRIMRTRIM 等函数。

  1. RTRIM – 删除字符串右侧的空格(或前导空格)

  2. LTRIM – 删除字符串左侧的空格(或尾随空格)

这是一个查询示例:

SELECT LTRIM(RTRIM(User_Name)) AS User_Name FROM Users

【讨论】:

    【解决方案2】:

    findAll() 方法中,当您从数据库中检索值并将它们添加到 ArrayList 之前,您可以调用trim()。如果您使用的是ArrayList.toString(),那么不要依赖此编写您自己的方法格式化你的 ArrayList。

    【讨论】:

      【解决方案3】:

      JPA 模块支持将查询手动定义为字符串或从方法名称派生。由于您当前已经实现了findAll(),它会自动派生查询。尽管从方法名称派生查询非常方便,但可能会遇到方法名称解析器不支持要使用的关键字或方法名称变得不必要的丑陋的情况。因此,您可以通过命名约定使用 JPA 命名查询,也可以使用 @Query 注释查询方法。后者修剪前导和尾随空格的示例如下所示:

      public CategoryRepository extends JpaRepository<Category,Integer> {
      @Query("SELECT LTRIM(RTRIM(Category_Field)) AS Category_Field FROM Categories")
        User findAll();
      }
      

      如果您仍有疑问,可以在此处阅读有关自定义 JPA 查询的更多信息:https://docs.spring.io/spring-data/jpa/docs/1.5.0.RELEASE/reference/html/jpa.repositories.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-12
        相关资源
        最近更新 更多