序言

有一个需要:判断数据库中是否存在name为xxx的数据。因为在记忆中抹除了对于CurdRepository的提供的办法。所以在实现该性能的时候并没有想到findByxxx办法。

问题再现

需要

判断数据库中是否有相应的name,如果有name则返回false,否则为true;

我的实现办法

  @Override  public Boolean existByName(String name) {    // 调用findOne办法,获取数据库中name属性为name的数据(不止一条则会报错)    // TownSpecs.equalName(name)结构查问条件    Optional<Town> result = this.townRepository.findOne(TownSpecs.equalName(name));    return this.townRepository.findOne(TownSpecs.equalName(name)).isPresent();  }

CurdRepository

在教程学习的时候始终在应用它,却没有去想它的作用,为啥要内置一个CurdRepository?
为啥像PagingAndSortingRepository都继承了它?那么它作用到底是啥?

curd


翻译后恍然大悟!
猜想是负责内置增删改查办法的库!

验证

看官网文档:没有想要的后果:都是如下的根本办法

发现关键字派生:derive

按关键字spring data crudrepository derive进行google搜寻,第一条就是想要的:

1. Structure of Derived Query Methods in Spring

1.Derived method names have two main parts separated by the first By keyword:
派生办法名称有两个次要局部,由第一个by关键字分隔:

例如:List<User> findByName(String name)

依据name进行查问

2.We can also use Distinct, First, or Top to remove duplicates or limit our result set:
咱们还能够应用Distinct、First或Top删除反复项或限度后果集:我的项目中曾经用到过了

3.Equality Condition Keywords
相等条件关键字

List<User> findByNameIs(String name);List<User> findByNameEquals(String name);

4. Similarity Condition Keywords
类似条件关键字

教程中咱们曾见过:初识综合查问

public interface StudentRepository extends PagingAndSortingRepository<Student, Long>, JpaSpecificationExecutor {    Page<Student> findAllByNameContains➊AndSnoStartsWith➋AndKlass➌(String name①, String sno②, Klass klass③, Pageable pageable);} 

5. Comparison Condition Keywords
比拟条件

List<User> findByAgeLessThan(Integer age);List<User> findByAgeLessThanEqual(Integer age);

6. Multiple Condition Expressions
多条件表达式
7. Sorting the Results
将后果排序

弊病

间接应用后盾教程的解释:初始综合查问

会失去如下报错

org.springframework.dao.InvalidDataAccessApiUsageException: Value must not be null!; nested exception is java.lang.IllegalArgumentException: Value must not be null!

再回头看需要:前台只有输出,才会发动异步验证,那么name必然不为空,能够合乎这种状况。

总结

学习的时候光记得CurdRepository有个毛病,就缓缓在本人记忆中忘记,然而也有像以后这种需要可能呈现。