这是一个简单的界面
public interface HPCrudRepository<T,ID extends Serializable>{
@Query("<how to write query here")
public List getThis(String somevalue);
}
在上面的示例中,参数someValue
无法直接传递给查询。我必须做一些预处理(比如用逗号或管道符号分割)。
如何预处理参数变量
答案 0 :(得分:2)
我认为没有针对您的要求的解决方案。但是如果你不想创建自己的实现类,你可以直接在界面中进行预处理。
在Java 8中添加了default
关键字,该关键字使功能能够在接口方法中使用逻辑。
因此,您可以创建一个预处理方法,然后调用接口的正确Query-Method。
public interface UserRepository extends JpaRepository<User, Long>{
@Query("Select u from User u where u.name = :s")
User findUserByName(@Param("s") String s);
default User findUserByNamePreprocessing(String s) {
//do you reprocessing stuff here..
return this.findUserByName(s);
}
}
然后您可以决定是否需要直接调用查询或使用预处理查询。
User user = repo.findUserByNamePreprocessing("Username");
对于小而简单的预处理要求,我认为这是一个简单易用的解决方案。如果它变得复杂,请创建一个实现类。
答案 1 :(得分:0)
不完全是您正在寻找的解决方案,但您可以将自定义behaviour添加到Spring数据存储库。
首先创建一个单独的界面
public interface HPCrudRepositoryCustom {
public void customMethod();
}
然后提供执行处理的实现。
public class HPCrudRepositoryImpl implements HPCrudRepositoryCustom {
@Autowired
HPCrudRepository hpCrudRepository;
public void customMethod(String somevalue) {
// process someValue
...
hpCrudRepository.getThis(processedOutcome);
}
}