[英]How can we implement custom find methods in CrudRepository to get only specific columns from a database?
[英]How to implement custom methods for CrudRepository?
我想創建一個RepositoryItemWriter
並提供一個自定義的CrudRepository
方法。
問題: CrudRepository
是一個接口,如果我在public class
實現它,則必須顯式實現所有方法。
因此,如何在CrudRepository
創建自定義方法實現?
@Autowired
private MyEntityRepository repository;
@Override
public ItemWriter<PricingCache> temWriter() {
RepositoryItemWriter<MyEntity> writer = new RepositoryItemWriter<>();
writer.setRepository(repository); //expects a CrudRepository
writer.setMethodName("save"); //how to change this to a custom method? eg firstValidatenThenSave()
return writer;
}
public interface MyEntityRepository extends CrudRepository<MyEntity, Long> {
}
您可以使用多種選項來自定義Spring Data方法和存儲庫。
如果使用Java8,則可以在界面上提供“默認”方法。
package com.example;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
import java.util.UUID;
@RepositoryRestResource(path = "sample", collectionResourceRel = "sample")
public interface SampleRepository extends CrudRepository<Sample, Long> {
@Override
default Sample save(Sample sample) {
System.out.println("DEFAULT SAVE CALLED!!");
sample = new Sample();
sample.setId(System.currentTimeMillis());
sample.setWhatever("stuff");
return sample;
}
@Override
default Sample findOne(Long id){
System.out.println("DEFAULT FIND CALLED!!");
Sample sample = new Sample();
sample.setId(id);
sample.setWhatever(UUID.randomUUID().toString());
return sample;
}
}
如果您使用的是Spring Data Rest,則可以使用“覆蓋”或替換您要自定義的路徑的請求映射創建自己的RepositoryRestController。
package com.example;
import org.springframework.data.rest.webmvc.RepositoryRestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@RepositoryRestController
public class SampleController {
@RequestMapping(path = "/sample", method = RequestMethod.DELETE)
public void delete(Long deleteMe){
System.out.println("RepositoryRestController CALLED for "+deleteMe);
}
}
您可以使用@Query批注創建一些自定義查詢方法。
@Override
@Query(value = "SELECT DISTINCT count(*) FROM SAMPLE_DISTINCT")
long count();
Spring Data Rest還具有一個命名約定,可用於創建自定義搜索/查找方法。 例如,如果我的人員對象具有firstName和lastName,則可以創建以下方法接口,Spring Boot會為我實現它們。
List<Person> findByFirstName(String firstName);
List<Person> findByFirstNameStartsWith(String firstName);
List<Person> findByFirstNameEndsWith(String firstName);
List<Person> findByFirstNameContains(String firstName);
List<Person> findByLastName(String lastName);
List<Person> findByLastNameStartsWith(String lastName);
List<Person> findByLastNameEndsWith(String lastName);
List<Person> findByLastNameContains(String lastName);
List<Person> findByFirstNameAndLastName(String firstName, String lastName);
List<Person> findByFirstNameContainsAndLastNameContains(String firstName, String lastName);
//etc...
這也應該在聲明為data-rest和data-mongodb的存儲庫接口上起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.