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