JpaRepository QueryByExample方法使用详解

本文介绍了Spring Data JPA从1.12版本开始的重要变化,即JpaRepository接口的改动,详细讲解了如何使用新的QueryByExampleExecutor接口进行数据查询,并提供了Optional类的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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());
    }

     

转载于:https://www.cnblogs.com/magotzis/p/8259998.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值