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

我与影子孤独终老i 提交于 2019-12-01 22:22:54

使用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上找到。

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!