序言
有一个需要:判断数据库中是否存在 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 有个毛病,就缓缓在本人记忆中忘记,然而也有像以后这种需要可能呈现。