点击左上角,关注:“锅外的大佬”

专注分享国外最新技术内容,帮助每一个技术人更优秀地成长

1.概览

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

2.依赖

首先,确保 pom.xml包含 SpringDataH2依赖。
  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-jpa</artifactId>
  4. <version>2.1.3.RELEASE</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.h2database</groupId>
  8. <artifactId>h2</artifactId>
  9. <scope>runtime</scope>
  10. <version>1.4.199</version>
  11. </dependency>
最新版本请移步Maven Central。

3.初始设置

假设我们有一个具有 id, firstName, lastName属性,名为 Passenger的实体类。
  1. @Entity
  2. classPassenger{
  3. @Id
  4. @GeneratedValue
  5. @Column(nullable =false)
  6. privateLong id;
  7. @Basic(optional =false)
  8. @Column(nullable =false)
  9. privateString firstName;
  10. @Basic(optional =false)
  11. @Column(nullable =false)
  12. privateString lastName;
  13. // constructor, static factory, getters, setters
  14. }
另外,用测试类往数据库填充一些 Passenger的样例数据:
  1. @DataJpaTest
  2. @RunWith(SpringRunner.class)
  3. publicclassPassengerRepositoryIntegrationTest{
  4. @PersistenceContext
  5. privateEntityManager entityManager;
  6. @Autowired
  7. privatePassengerRepository repository;
  8. @Before
  9. publicvoid before(){
  10.         entityManager.persist(Passenger.from("Jill","Smith"));
  11.         entityManager.persist(Passenger.from("Eve","Jackson"));
  12.         entityManager.persist(Passenger.from("Fred","Bloggs"));
  13.         entityManager.persist(Passenger.from("Ricki","Bobbie"));
  14.         entityManager.persist(Passenger.from("Siya","Kolisi"));
  15. }
  16. //...
  17. }

4.忽略大小写查询

现在假设我们想要执行一个不区分大小写的搜索,以查找所有具有给定名字( firstNamepassenger。 为此,定义我们的 PassengerRepository
  1. @Repository
  2. publicinterfacePassengerRepositoryextendsJpaRepository<Passenger,Long>{
  3. List<Passenger> findByFirstNameIgnoreCase(String firstName);
  4. }
这里, IgnoreCase关键字保证查询不区分大小写。 我们也可以使用JUnit测试一下:
  1. @Test
  2. publicvoid givenPassengers_whenMatchingIgnoreCase_thenExpectedReturned(){
  3. Passenger jill =Passenger.from("Jill","Smith");
  4. Passenger eve =Passenger.from("Eve","Jackson");
  5. Passenger fred =Passenger.from("Fred","Bloggs");
  6. Passenger siya =Passenger.from("Siya","Kolisi");
  7. Passenger ricki =Passenger.from("Ricki","Bobbie");
  8. List<Passenger> passengers = repository.findByFirstNameIgnoreCase("FrED");
  9.     assertThat(passengers, contains(fred));
  10.     assertThat(passengers, not(contains(eve)));
  11.     assertThat(passengers, not(contains(siya)));
  12.     assertThat(passengers, not(contains(jill)));
  13.     assertThat(passengers, not(contains(ricki)));
  14. }
尽管传递了 FrED作为参数,但是返回的 passenger列表中包含了一个 Fred。显然,在 IgnoreCase关键字的帮助下,我们实现了不分大小写的查询。

5.总结

在本快速教程中,我们学习了如何在 SpringDataRepository中创建不区分大小写的查询。最后,代码示例可以Github上找到。
原文链接:https://www.baeldung.com/spring-data-case-insensitive-queries
作者:Shubhra Srivastava
译者:Leesen



动手扫一扫关注,帮你不断突破技术壁垒
继续阅读
阅读原文