使用Spring Data Repository 不区分大小写查询
原文链接:https://www.baeldung.com/spring-data-case-insensitive-queries
译者:liululee
1. 概览
Spring Data JPA
查询默认是大小写敏感的,换句话说,字段值的比较是区分大小写的。
本教程中,我们将探讨如何在Spring Data JPA repository
快速新建不区分大小写的查询.
2. 依赖
首先,确保pom.xml
包含Spring Data
和H2
依赖。
<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上找到。
文章来自公众号:锅外的大佬
专注分享国外最新技术内容, 帮助每位开发者更优秀地成长
来源:oschina
链接:https://my.oschina.net/u/2772398/blog/3054191