重识CurdRepository

序言 有一个需求:判断数据库中是否存在name为xxx的数据。由于在记忆中抹除了关于CurdRepository的提供的方法。所以在实现该功能的时候并没有想到findByxxx方法。
问题再现 需求

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

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

CurdRepository 在教程学习的时候一直在使用它,却没有去想它的作用,为啥要内置一个CurdRepository?
为啥像PagingAndSortingRepository都继承了它?那么它作用究竟是啥?
curd 【重识CurdRepository】重识CurdRepository
文章图片

翻译后豁然开朗!
猜测是负责内置增删改查方法的库!
验证
看官方文档:没有想要的结果:都是如下的基本方法
重识CurdRepository
文章图片

发现关键字派生:derive 按关键字spring data crudrepository derive进行google搜索,第一条就是想要的:
重识CurdRepository
文章图片

1. Structure of Derived Query Methods in Spring
1.Derived method names have two main parts separated by the first By keyword:
派生方法名称有两个主要部分,由第一个by关键字分隔:
例如:List findByName(String name)
根据name进行查询

2.We can also use Distinct, First, or Top to remove duplicates or limit our result set:
我们还可以使用Distinct、First或Top删除重复项或限制结果集:项目中已经用到过了
重识CurdRepository
文章图片

3.Equality Condition Keywords
相等条件关键字
List findByNameIs(String name); List findByNameEquals(String name);

4. Similarity Condition Keywords
相似条件关键字
教程中我们曾见过:初识综合查询
public interface StudentRepository extends PagingAndSortingRepository, JpaSpecificationExecutor { Page findAllByNameContains?AndSnoStartsWith?AndKlass?(String name①, String sno②, Klass klass③, Pageable pageable); }

5. Comparison Condition Keywords
比较条件
List findByAgeLessThan(Integer age); List findByAgeLessThanEqual(Integer age);

6. Multiple Condition Expressions
多条件表达式
7. Sorting the Results
将结果排序
弊端 直接使用后台教程的解释:初始综合查询
重识CurdRepository
文章图片

会得到如下报错
org.springframework.dao.InvalidDataAccessApiUsageException: Value must not be null!; nested exception is java.lang.IllegalArgumentException: Value must not be null!

再回头看需求:前台只有输入,才会发起异步验证,那么name必然不为空,可以符合这种情况。
总结 学习的时候光记得CurdRepository有个缺点,就慢慢在自己记忆中遗忘,但是也有像当前这种需求可能出现。

    推荐阅读