JpaRepository QueryByExample方法使用详解
2018-06-18 03:55:40来源:未知 阅读 ()
spring-data-jpa从1.12版本开始,JpaRepository继承的接口由之前的CrudRepository,PagingAndSortingRepository改为了QueryByExampleExecutor,PagingAndSortingRepository。这其中的变化主要就是CrudRepository接口换成了QueryByExampleExecutor接口。
QueryByExampleExecutor接口用了Java 1.8增加的Optional 用以优雅的解决NullPointException 的问题。从而导致JpaRepository中之前类似于
T findOne(ID id);
方法定义修改为
Optional<S> findOne(Example<S> example);
即传参和回调分别改为了Example和Optional。因此方法使用与之前不同。
之前调用findOne方法只需简单一行即可。
public User getOne(String id) { return userRepository.findOne(id); }
现在则需要先封装成一个Exmple再传参进行查询。
public User getOne(String id) { User user = new User(); user.setId(id); Example<User> userExample = Example.of(user); return userRepository.findOne(userExample).orElse(null);
}
而且返回的是一个Optional类,关于Optional类具体的解释就不贴出来了,以下是几种关于Optional获取实体类的实用方法。
-
存在即返回, 无则提供默认值
return user.orElse(null); //而不是 return user.isPresent() ? user.get() : null; return user.orElse(UNKNOWN_USER);
-
存在即返回, 无则由函数来产生
return user.orElseGet(() -> fetchAUserFromDatabase()); //而不要 return user.isPresent() ? user: fetchAUserFromDatabase();
-
存在才对它做点什么
user.ifPresent(System.out::println); //而不要下边那样 if (user.isPresent()) { System.out.println(user.get()); }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 聊聊微服务架构及分布式事务解决方案! 2020-06-10
- 类的继承,方法重新中修饰符如何定义 2020-06-10
- Spring Boot 实现定时任务的 4 种方式 2020-06-10
- 一口气说出 6种 延时队列的实现方案,面试稳稳的 2020-06-08
- 详解SpringBoot(2.3)应用制作Docker镜像(官方方案) 2020-06-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash