重识CurdRepository
作者:郝泽龙_HZ
来源:SegmentFault 思否社区
序言
有一个需求:判断数据库中是否存在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
相似条件关键字
教程中我们曾见过:初识综合查询(https://www.kancloud.cn/yunzhiclub/springboot_angular_guide/1398018)
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
将结果排序
弊端
直接使用后台教程的解释:初始综合查询(https://www.kancloud.cn/yunzhiclub/springboot_angular_guide/1398018)
会得到如下报错
org.springframework.dao.InvalidDataAccessApiUsageException: Value must not be null!; nested exception is java.lang.IllegalArgumentException: Value must not be null!
再回头看需求:前台只有输入,才会发起异步验证,那么name必然不为空,可以符合这种情况。
总结
学习的时候光记得CurdRepository有个缺点,就慢慢在自己记忆中遗忘,但是也有像当前这种需求可能出现。
点击左下角阅读原文,到 SegmentFault 思否社区 和文章作者展开更多互动和交流,扫描下方”二维码“或在“公众号后台“回复“ 入群 ”即可加入我们的技术交流群,收获更多的技术文章~
- END -
关注公众号:拾黑(shiheibook)了解更多
赞助链接:
关注数据与安全,洞悉企业级服务市场:https://www.ijiandao.com/
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

随时掌握互联网精彩
- 欧元人民币汇率2024年9月18日
- 社区精选|花了半个小时基于 ChatGPT 搭建了一个微信机器人
- 【超级返现预告】9月购数码家电最高可返500元现金
- 好多人找青小蛙要的软件,现在它来了。
- 中国这十年丨快递年支撑实物商品网上零售超过10万亿元
- 【杂谈快报】乐视手机回归,首款“全国产”,内置华为 HMS
- 【杂谈快报】vivo号召App开发者自查自纠 隐私不合规将进行下架、冻结等
- 最佳 Web 编程语言都有哪些?
- 运营商人请远离这些易发的职务违法操作
- 微信被上海消保委点名;电竞纳入亚运会正式项目计入奖牌榜;网易云音乐CEO卸任|Do早报
- 华为进军台式机动了谁的蛋糕
- 微软断供不用怕 我们还有统信UOS