详解Spring Data JPA 模糊查询的正确用法
Spring Data JPA是基于JPA规范的一个简化操作数据库的框架,在使用Spring Data JPA进行数据库操作时,经常会使用模糊查询,下面是模糊查询的正确用法及示例。
特定字段模糊查询
特定字段模糊查询是针对某一个特定的字段进行模糊查询,示例代码如下:
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
/**
* 根据用户名模糊查询用户信息
*
* @param name 用户名
* @return 用户信息列表
*/
List<User> findByNameLike(String name);
}
在上述示例代码中,findByNameLike
是Spring Data JPA定义的查询方法,其中name
为要查询的字段名称,使用Like
关键字可以实现模糊匹配。在使用时只需传入模糊匹配的字符串即可。
动态字段模糊查询
动态字段模糊查询是一种根据多个字段进行模糊查询的方法,可以做到根据用户输入的不同字段进行模糊匹配,示例代码如下:
@Repository
public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {
/**
* 动态模糊查询
*
* @param name 用户名
* @param phone 电话号码
* @param criteria 查询条件
* @return 用户信息列表
*/
default List<User> dynamicQuery(String name, String phone, QueryCriteria criteria) {
return findAll((Specification<User>) (root, query, criteriaBuilder) -> {
List<Predicate> predicates = new ArrayList<>();
if (StringUtils.isNotBlank(name)) {
predicates.add(criteriaBuilder.like(root.get("name"), "%" + name + "%"));
}
if (StringUtils.isNotBlank(phone)) {
predicates.add(criteriaBuilder.like(root.get("phone"), "%" + phone + "%"));
}
// 判断是否有查询条件
if (criteria != null && criteria.getCriterias() != null && criteria.getCriterias().size() > 0) {
for (Criteria criteria1 : criteria.getCriterias()) {
if (StringUtils.isNotBlank(criteria1.getCriteriaKey()) && StringUtils.isNotBlank(criteria1.getCriteriaValue())) {
predicates.add(criteriaBuilder.like(root.get(criteria1.getCriteriaKey()), "%" + criteria1.getCriteriaValue() + "%"));
}
}
}
// 复杂条件查询
if (predicates.size() > 0) {
return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
} else {
return criteriaBuilder.conjunction();
}
});
}
}
在上述示例代码中,dynamicQuery
方法是定义的动态模糊查询,方法中需要传入要查询的用户名、电话及可变条件列表。在方法中使用了findAll
及JpaSpecificationExecutor
来实现动态查询,其中Specification
是Spring Data JPA提供的条件查询接口,用于实现复杂查询条件。
至此,使用Spring Data JPA实现模糊查询的方法及示例代码已经完成。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Spring Data Jpa 模糊查询的正确用法 - Python技术站