Spring Data 忽略大小写查询

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

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

1.概览

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

2.依赖

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

<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.忽略大小写查询

现在假设我们想要执行一个不区分大小写的搜索,以查找所有具有给定名字( firstNamepassenger。 为此,定义我们的 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.总结

在本快速教程中,我们学习了如何在 SpringDataRepository中创建不区分大小写的查询。最后,代码示例可以Github上找到。

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

作者:Shubhra Srivastava

译者:Leesen

 


640?wx_fmt=png


动手扫一扫关注,帮你不断突破技术壁垒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值