您可以按照以下方式完成:
1. 使用存储库查询关键字按角色查找所有用户
@Repository
public interface UserRepository extends JpaRepository<User, UUID> {
Set<User> findByRole(String role);
}
2. 在UserService
中创建一个名为getAllUsers
的方法,并使用@Value获取role value
:
@Service
public class UserService {
@Autowired
private UserRepository repository;
@Value("${query.parameters.role}")
private String role;
public Set<User> getAllUsers() {
return repository.findByRole(role);
}
}
另一种回答这个问题的方法是实现一个自定义的
SpEL
,并且被
@Query
支持。你可以查看这个
Spring Data JPA中的SpEL支持。
然后,你应该按照以下步骤进行:
1. 创建一个
ConfigProperties
类,以便您可以读取和获取
application.properties
。
@Configuration
@PropertySource("classpath:application.properties")
@ConfigurationProperties(prefix = "query")
public class ConfigProperties {
private Parameters parameters;
}
public class Parameters {
private String role;
}
2. 实现一个自定义的 EvaluationContextExtensionSupport
,并引用 ConfigProperties
。
public class PropertyEvaluationContextExtension extends EvaluationContextExtensionSupport {
private final ConfigProperties configProperties;
public PropertyEvaluationContextExtension(final ConfigProperties configProperties) {
this.configProperties= configProperties;
}
@Override
public String getExtensionId() {
return "properties";
}
@Override
public ConfigProperties getRootObject() {
return this.configProperties;
}
}
3. - 创建一个bean,以便调用您的自定义PropertyEvaluationContextExtension
@Configuration
public class CustomConfig {
private final ConfigProperties configProperties;
public CustomConfig(final ConfigProperties configProperties) {
this.configProperties= configProperties;
}
@Bean
EvaluationContextExtensionSupport propertyExtension() {
return new PropertyEvaluationContextExtension(configProperties);
}
}
4. - 按照以下格式调用 query.parameters.role
: ?#{query.parameters.role}
@Query(value = "SELECT u FROM User u WHERE u.role = ?#{query.parameters.role}")
Set<User> getAllUsers();