首页 > 解决方案 > 来自 Spring JPA 查询的自定义结果

问题描述

我有一个 User 类,我想从数据库中提取该类的所有对象。我正在使用 Spring Data JPA 并使用@Query. 有没有办法可以隐藏用户电话号码的部分数字。比如将 123-456-7890 转换为 123-XXX-XXXX。

 @Query(value = "SELECT u FROM User u ORDER BY u.name")
 List<User> getAllUsers();

我在代码中的多个位置使用用户对象,因此每次获取和更新记录将非常耗时,并且用户会随着时间的推移而增长,因此也会影响性能。

有什么方法(一些后处理器或任何东西)可以在从数据库中获取数据后将数据填充到对象中来处理它。

任何指针都会非常有帮助。

谢谢。

标签: javaspringspring-bootspring-data-jpaspring-data

解决方案


您可以在使用属性转换器获取时转换您的数据。

public class PhoneNumberAttributeConverter implements AttributeConverter<String, String> {
    @Override
    public String convertToDatabaseColumn(String value) {
        return value;
    }
    @Override
    public String convertToEntityAttribute(String a) {
        String value = a.substring(0, 3) + s.substring(3).replaceAll("[0-9]", "X");
        return value;
    }
}

并在现场使用

@Convert(converter = PhoneNumberAttributeConverter.class)
private String phoneNumber;

推荐阅读