文档章节

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

liululee
 liululee
发布于 05/26 14:46
字数 594
阅读 7
收藏 1

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

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

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

本文转载自:http://www.spring4all.com/article/14952

liululee
粉丝 121
博文 49
码字总数 47801
作品 0
杭州
程序员
私信 提问
Spring boot 中自定义JpaRepository使用

普通JpaRepository类 JpaRepository一般的筛选查询,均可以通过的形式解决,总的很好用,但是总有一部分的业务查询是需要JpaRepository不能解决的。这个时候,就需要在此基础上面增加自定义的...

亚林瓜子
2018/08/10
0
0
Spring Data(一)概念和仓库的定义

Spring Data(一)概念和仓库的定义 Spring Data的主要任务是为数据访问提供一个相似的、一致的、基于Spring的编程模型,同时又保留着下面各个数据存储的特征。它使得使用数据访问技术非常的...

小忽悠
2018/06/21
0
0
PagingAndSortingRepository

PagingAndSortingRepository AppleFramework在数据访问控制层采用了Spring Data作为这一层的解决方案, 下面就对Spring Data相关知识作一个较为详细的描述。 1.Spring Data所解决的问题 Spri...

风中帆
2015/03/07
0
1
开始使用 Spring Data JPA

在我们刚刚发布项目Spring Data JPA的第一个里程碑时,我想给你一个关于它的简要介绍.正如你所知道的,Spring framework 对于基于JPA的数据存取层提供了支持.那么 Spring Data JPA 是如何添加到...

0595
2013/09/14
64.9K
51
一步步学习 Spring Data 系列之JPA(一)

大概有半年多没有写博客了,主要是最近忙于工作,也没来得及与大家分享技术。当然现在的技术大多都有人写其博客分享了,也找不到合适写的,所以也就懒得写了。最近在SpringSource上看到了一好...

张廷
2012/07/23
0
3

没有更多内容

加载失败,请刷新页面

加载更多

双因素认证绕过的钓鱼工具

研究人员发布了两个工具——Muraen和NecroBrowser。它们可以自动绕过2FA进行钓鱼攻击,大多数防御措施都无法抵御它们。 渗透测试人员和攻击者为他们的武器库添加了一个新的工具,这种工具可以...

Linux就该这么学
21分钟前
1
0
java代码和js两种方式判断浏览器是否是IE11

java代码判断浏览器是否是IE11 HttpServletRequest request = ServletActionContext.getRequest();String agent = request.getHeader("User-Agent");//判断是IE浏览器而且不是IE11的时......

平凡三度
24分钟前
1
0
2019 Vue开发指南:你都需要学点啥?

转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 原文出处:https://dzone.com/articles/vue-development-in-2019-what-you-need-to-know 如果...

葡萄城技术团队
27分钟前
0
0
[gitlab]登录页定制

Administrator - 设置 https://blog.csdn.net/weixin_43606948/article/details/85222755 支持markdown,用###...

Danni3
35分钟前
1
0
IT兄弟连 Java语法教程 编写Java源代码

现在我们来一步一步的编写第一个Java程序,鼎鼎大名的“HelloWorld”。 编写Java源代码 编写Java源代码可以使用任何无格式的文本编辑器,在Windows操作系统上可以使用记事本、Edit Plus等程序...

老码农的一亩三分地
50分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部