译:Spring Data Repository 不区分大小写查询

使用Spring Data Repository 不区分大小写查询

原文链接:https://www.baeldung.com/spring-data-case-insensitive-queries

作者:Shubhra Srivastava

译者:liululee

1. 概览

Spring Data JPA查询默认是大小写敏感的,换句话说,字段值的比较是区分大小写的。 本教程中,我们将探讨如何在Spring Data JPA repository快速新建不区分大小写的查询.

2. 依赖

首先,确保pom.xml包含Spring DataH2依赖。


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
    <version>1.4.199</version>
</dependency>

最新版本请移步Maven Central

3. 初始设置

假设我们有一个具有id,firstName,lastName属性,名为Passenger的实体类。


@Entity
class Passenger {
  
    @Id
    @GeneratedValue
    @Column(nullable = false)
    private Long id;
  
    @Basic(optional = false)
    @Column(nullable = false)
    private String firstName;
  
    @Basic(optional = false)
    @Column(nullable = false)
    private String lastName;
  
    // constructor, static factory, getters, setters
}

另外,用测试类往数据库填充一些Passenger的样例数据:


@DataJpaTest
@RunWith(SpringRunner.class)
public class PassengerRepositoryIntegrationTest {
 
    @PersistenceContext
    private EntityManager entityManager;
    @Autowired
    private PassengerRepository repository;
 
    @Before
    public void before() {
        entityManager.persist(Passenger.from("Jill", "Smith"));
        entityManager.persist(Passenger.from("Eve", "Jackson"));
        entityManager.persist(Passenger.from("Fred", "Bloggs"));
        entityManager.persist(Passenger.from("Ricki", "Bobbie"));
        entityManager.persist(Passenger.from("Siya", "Kolisi"));
    }
     
    //...
}

4. 忽略大小写查询

现在假设我们想要执行一个不区分大小写的搜索,以查找所有具有给定名字(firstName)passenger。 为此,定义我们的PassengerRepository


@Repository
public interface PassengerRepository extends JpaRepository<Passenger, Long> {
    List<Passenger> findByFirstNameIgnoreCase(String firstName);
}

这里,IgnoreCase关键字保证查询不区分大小写。 我们也可以使用JUnit测试一下:


@Test
public void givenPassengers_whenMatchingIgnoreCase_thenExpectedReturned() {
    Passenger jill = Passenger.from("Jill", "Smith");
    Passenger eve = Passenger.from("Eve", "Jackson");
    Passenger fred = Passenger.from("Fred", "Bloggs");
    Passenger siya = Passenger.from("Siya", "Kolisi");
    Passenger ricki = Passenger.from("Ricki", "Bobbie");
 
    List<Passenger> passengers = repository.findByFirstNameIgnoreCase("FrED");
 
    assertThat(passengers, contains(fred));
    assertThat(passengers, not(contains(eve)));
    assertThat(passengers, not(contains(siya)));
    assertThat(passengers, not(contains(jill)));
    assertThat(passengers, not(contains(ricki)));
}

尽管传递了FrED作为参数,但是返回的passenger列表中包含了一个Fred。显然,在IgnoreCase关键字的帮助下,我们实现了不分大小写的查询。

5. 总结

在本快速教程中,我们学习了如何在Spring Data Repository中创建不区分大小写的查询。

最后,代码示例可以Github上找到。

文章来自公众号:锅外的大佬

专注分享国外最新技术内容, 帮助每位开发者更优秀地成长

转载于:https://my.oschina.net/liululee/blog/3054191

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值