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

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

原文连接:https://www.baeldung.com/spring-data-case-insensitive-queriesjava

做者:Shubhra Srivastavagit

译者:liululeegithub

1. 概览

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

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 Centralmaven

3. 初始设置

假设咱们有一个具备id,firstName,lastName属性,名为Passenger的实体类。spring-boot

@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测试一下:code

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

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

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

相关文章
相关标签/搜索